我有什么我认为将是一个简单的过程更新旧的"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;
}
我见过很多回答基本上都说"使用PDO"或"为什么使用过程式?"面向对象是前进的方向",但我真的不想做一种不同的风格。如果能知道是什么导致了上面的失败,那就太好了。我不会离得太远,对吧?提前感谢您的帮助!
首先,您应该将@mysqli_close($con);
移动到不会再调用任何mysqli
函数的位置(基本上是底部)。
mysqli_fetch_array()
函数:
返回与获取的行或对应的字符串数组
如果结果集中没有更多的行,则返回NULL。
因此它返回一个数组,该数组对应于一个行,而不是所有行,这意味着语句$array[$a]["column"];
没有多大意义(我知道您正在尝试做其他答案所说的事情,但是您没有包含适当的代码来这样做[它在该答案中进一步提供])。因此,我建议使用正常的方式:尝试删除$array = mysqli_fetch_array($result2, MYSQLI_BOTH)
,并添加此而不是while
-loop:
while ($row = mysqli_fetch_array($result2, MYSQLI_BOTH))
{
echo "Column: " . $row["column"] . " and ID: " . $row["ID"];
}
由于mysqli_fetch_array()
更改了result-object,因此每次循环将得到不同的结果,这意味着$row
将由不同的值组成。每个不同的值将是数据库中的不同行,列作为数组键,值作为数组值。但是,由于使用的是MYSQLI_BOTH
,因此还可以通过使用列号作为数组键来访问值。如果你不需要这个,我建议改成MYSQLI_ASSOC
。
这也意味着您可以完全删除$num2
-变量和$a
-变量。如果要使用现在使用的方法,则需要在while
-循环之前使用该问题答案中提供的第二个代码。不过请注意,您还需要为每个循环增加变量$a
为1,而您当前的代码不会这样做。基本上,您需要将其更改为:
$var1=$array[$a]["column"];
$var2=$array[$a++]["id"]; //the variable $a is increased after $var2 is assigned
echo "Column: ".$var1." and ID: ".$var2;
虽然这段代码要复杂得多,如果你只是要打印变量…你不只是打印它们,而是将它们赋值给一个数组,然后再打印它们,这需要两个循环而不是一个循环。就我个人而言,我建议按照如下方式修改整个代码:
//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);