我认为这是一个简单的过程,更新旧的" 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;为什么要使用程序?面向对象是要走的路。但我真的不想做不同的风格。只知道导致上述失败的原因真是太棒了。我不能太离合,对吧?提前感谢您的帮助!
答案 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);