如何正确迭代mysqli_fetch_array(程序)?

时间:2014-08-23 03:38:19

标签: php mysqli

我认为这是一个简单的过程,更新旧的" mysql"代码到" mysqli。"在许多地方,有代码迭代通过多维数组来获取值。我试图制作一个类似的循环,并使用mysqli_fetch_array或mysqli_fetch_all,而我只是撞墙而已。进程失败(挂起)或者它没有返回任何值。我已经浏览了整个网络,发现了各种各样的例子,其中没有一个很有效......通常它们不是用于程序方法(https://stackoverflow.com/questions/12026979/how-do-iterate-the-result-of-mysqli-fetch-array)。

我目前有:

$query2 = "SELECT * FROM mp WHERE email='$email'";

//connect to database    
require("../dbinfo.php");
$con = mysqli_connect($host,$username,$password,$database);                 

$result2=@mysqli_query($con, $query2);
$array = mysqli_fetch_array($result2, MYSQLI_BOTH);
@mysqli_close($con);  //question...does this need to come later, after num_rows?


$num2=0;
$num2=@mysqli_num_rows($result2);


$a=0;
while ($a < $num2)
        {
//cycle through to get info...this comes up blank, when it should have 3 sets of values.
            $var1=$array[$a]["column"];
            $var2=$array[$a]["id"];
            echo "Column: ".$var1." and ID: ".$var2;
}

我已经看到很多答案基本上都说'#34;使用PDO&#34;或者&#34;为什么要使用程序?面向对象是要走的路。但我真的不想做不同的风格。只知道导致上述失败的原因真是太棒了。我不能太离合,对吧?提前感谢您的帮助!

1 个答案:

答案 0 :(得分:1)

首先,您应该将@mysqli_close($con);移动到您不再调用mysqli - 函数(基本上是底部)的位置。

其次,你应该在PHP手册中查找mysqli_fetch_array() - 函数:

  

返回与获取的行或对应的字符串数组   如果结果集中没有更多行,则为NULL。

所以它返回一个对应一个行的数组,而不是所有行,这意味着语句$array[$a]["column"];没有多大意义(我知道你了)试图做其他答案所说的,但你还没有包含适当的代码[在答案中进一步提供])。相反,我建议使用正常方式:尝试删除$array = mysqli_fetch_array($result2, MYSQLI_BOTH),然后添加此代替while - 循环:

while ($row = mysqli_fetch_array($result2, MYSQLI_BOTH))
{
    echo "Column: " . $row["column"] . " and ID: " . $row["ID"];
}

由于mysqli_fetch_array()更改了结果对象,因此每个循环都会得到不同的结果,这意味着$row将包含不同的值。每个不同的值都是数据库中的不同行,列为数组键,值为数组值。但是,由于您正在使用MYSQLI_BOTH,因此您还可以使用column-number作为数组键来访问值。如果您不需要,我建议将其更改为MYSQLI_ASSOC

这也意味着您可以完全删除$num2 - 变量和$a - 变量。如果您想使用现在使用的方法,则需要在while循环之前使用the answer to this question中提供的第二个代码。虽然请注意,您需要为每个循环增加变量$a,这是您当前代码不会做的。基本上,您需要将其更改为:

$var1=$array[$a]["column"];
$var2=$array[$a++]["id"]; //the variable $a is increased after $var2 is assigned
echo "Column: ".$var1." and ID: ".$var2;

虽然这个代码要复杂得多,如果你只打算打印变量......你不是只打印它们,而是将它们分配给一个数组,然后再打印它们,需要2个循环而不是1个循环。就个人而言,我建议更改整个代码如下:

//connect to database    
require("../dbinfo.php");

$con = mysqli_connect($host,$username,$password,$database);                 
$result2 = @mysqli_query($con, $query2);

while ($row = mysqli_fetch_array($result2, MYSQLI_BOTH))
{
    echo "Column: " . $row["column"] . " and ID: " . $row["ID"];
}

@mysqli_close($con);
相关问题