从 MySQL 设置一个数组,然后将每个值设置为变量 PHP

Posted

技术标签:

【中文标题】从 MySQL 设置一个数组,然后将每个值设置为变量 PHP【英文标题】:Setting an Array From MySQL then Setting Each Value As a Variable PHP 【发布时间】:2018-06-04 14:55:02 【问题描述】:

我正在尝试根据从我的数据库中提取的数据设置 12 个变量。目前,我将它们设置为一个数组,然后从那里设置为一个变量。但是,由于某种原因,我的数据库中的第 12 个值没有被输入到我的数组中,然后当我尝试回显每个变量时,我会错过匹配的日期。任何人都可以在这里看到我哪里出错了吗?

示例数据库

日期 1 = 01/01/2018

日期 2 = 02/01/2018

日期 3 = 03/01/2018

date4 = 04/01/2018

日期 5 = 05/01/2018

date6 = 06/01/2018

date7 = 07/01/2018

date8 = 08/01/2018

日期 9 = 09/01/2018

date10 = 10/01/2018

date11 = 11/01/2018

date12 = 12/01/2018

示例数组

Array
(
    [0] =>; 01/01/2018
    [1] =>; 02/01/2018
    [2] =>; 03/01/2018
    [3] =>; 04/01/2018
    [4] =>; 05/01/2018
    [5] =>; 06/01/2018
    [6] =>; 07/01/2018
    [8] =>; 08/01/2018
    [9] =>; 09/01/2018
    [9] =>; 10/01/2018
    [10] =>; 11/01/2018
    [11] =>; 12/01/2018  //-----This isn't being added-----
)

回声示例

$var1 = 01/01/2018 //-----应该是 01/01/2018-----

$var2 = 02/01/2018 //-----应该是 02/01/2018-----

$var3 = 01/01/2018 //-----应该是 03/01/2018-----

$var4 = 02/01/2018 //-----应该是 04/01/2018-----

$var5 = 03/01/2018 //-----应该是 05/01/2018-----

$var6 = 01/01/2018 //-----应该是 06/01/2018-----

$var7 = 02/01/2018 //-----应该是 07/01/2018-----

$var8 = 03/01/2018 //-----应该是 08/01/2018-----

$var9 = 04/01/2018 //-----应该是 09/01/2018-----

$var10 = 01/01/2018 //-----应该是 10/01/2018-----

$var11 = 02/01/2018 //-----应该是 11/01/2018-----

$var12 = 03/01/2018 //-----应该是 12/01/2018-----

<?php
    include 'db.php';

    if (isset($_GET['id'])) 

        $id = $_GET['id'];

        $sql = "SELECT * FROM system WHERE `id` = '$id' AND `status` = 'Not Set'";
        $result = $conn->query($sql);
        $row = $result->fetch_assoc();

        if ($result->num_rows > 0) 

            $arrayResults = array();
            $i = 0;

            while($row = $result->fetch_assoc()) 

                array_push($arrayResults, $row['date']);

                foreach($arrayResults as $value)

                    $'var'.$i = $value;
                    $i++;

                

            
            print_r($arrayResults);

            echo '<br><br>';

            echo $var1.'<br>';

            echo $var2.'<br>';

            echo $var3.'<br>';

            echo $var4.'<br>';

            echo $var5.'<br>';

            echo $var6.'<br>';

            echo $var7.'<br>';

            echo $var8.'<br>';

            echo $var9.'<br>';

            echo $var10.'<br>';

            echo $var11.'<br>';

            echo $var12.'<br>';

        
    
?>

更新

回显日期现在以正确的顺序回显,现在唯一的问题是它仍然缺少数据库中的第一个条目,因此它只创建 11 个变量而不是 12 个。数组数据打印除第一个之外的所有日期,因此数组条目是从 [0] 到 [10] 时需要为 [0] 到 [11]。

<?php
    include 'db.php';

    if (isset($_GET['id'])) 

        $id = $_GET['id'];

        $sql = "SELECT * FROM system WHERE `id` = '$id' AND `status` = 'No Set'";
        $result = $conn->query($sql);

        if ($result->num_rows > 0) 

            $row = $result->fetch_assoc();

            $arrayResults = array();
            $i = 0;

            while($row = $result->fetch_assoc()) 

                array_push($arrayResults, $row['date']);
                $'var'.$i = $row['date'];
                $i++;

            
            print_r($arrayResults);

            echo '<br><br>';

            echo $var0.'<br>';

            echo $var1.'<br>';

            echo $var2.'<br>';

            echo $var3.'<br>';

            echo $var4.'<br>';

            echo $var5.'<br>';

            echo $var6.'<br>';

            echo $var7.'<br>';

            echo $var8.'<br>';

            echo $var9.'<br>';

            echo $var10.'<br>';

            echo $var11.'<br>';


        
    
?>

【问题讨论】:

嘿只是一个友好的警告,您的代码容易受到 SQL 注入的攻击。查看mysqli prepare 来解决这个问题。 【参考方案1】:

你应该把“foreach”放在“while”之外

       while($row = $result->fetch_assoc()) 

            array_push($arrayResults, $row['date']);

       

       foreach($arrayResults as $value)

                $'var'.$i = $value;
                $i++;

       

请注意,这个 make 循环会在结果上重复两次。您可以在 while 中直接实例化“$varx”。如果你对 $arrayResults 没有其他用途,你可以跳过它。

while($row = $result->fetch_assoc()) 

        array_push($arrayResults, $row['date']);//this line is not compulsory. Depends if you need $arrayResults later.
        $'var'.$i = $row['date'];
        $i++;

【讨论】:

感谢您的帮助,我发现这个答案有一个小问题。当我实现它时,我发现它跳过了我数据库中的前两个条目。知道为什么会这样,因为这是我最接近答案的地方? 啊,是的,我没看到。你不应该做“$row = $result->fetch_assoc();”在if之外。您的代码中的第一个。这解释了缺少一个条目。现在第二个我不知道。但是请尝试删除此行并让我知道。 当然也正如 delboy1978uk 的回答中所说,如果你希望你的第一个变量是 $var1,请将 $i 设置为 1 我已经在我的帖子中添加了一个更新,提供了我尝试使用的新代码,这样你就可以看到发生了什么。当我将$row = $result-&gt;fetch_assoc(); 移动到if 标签内时,仍然没有得到第一个标签。但是现在变量中的所有内容都按照正确的顺序排列,但仍然缺少第 12 个条目。 解决了问题!删除了$row = $result-&gt;fetch_assoc();,果然一切运行良好。谢谢你的帮助。【参考方案2】:

您从$var1 回显,但您的循环从$i = 0 开始;

尝试设置$i = 1,或开始回显$var0并以$var11结束

【讨论】:

感谢您的观察,非常有效的观点。我使用了$var0$var11 但是,这并没有解决任何问题。我仍然没有从数据库中获取到数组的第 12 个日期,数组中的编号为 [11],它只会转到第 11 个编号 [10]。此外,我仍然没有正确设置我的变量,因为它们仍然像示例显示的那样为每个变量回显不正确的日期。

以上是关于从 MySQL 设置一个数组,然后将每个值设置为变量 PHP的主要内容,如果未能解决你的问题,请参考以下文章

从内容页面设置母版页上的属性值

mysql自动增加的字段怎么设置初始值

如何从数组中动态设置下拉列表的值

如何将数组设置为mysql用户变量

plist中的增量编号

使用 memset 设置数组