【发布时间】:2014-08-23 19:09:35
【问题描述】:
我有一个我认为将旧的“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 调用之后将 mysqli_close 放在页面底部。您不想在完成所有这些功能之前关闭连接。
-
您的代码易受 SQL 注入攻击,除非您对
$email变量执行检查。 -
是的,谢谢...还有很多额外的代码可以验证。我不担心 SQL 注入。但是@Rasclatt,我尝试将 mysqli_close 移到最后,但它仍然无法正常工作。我意识到由于某种原因无法提取 $var1, $var2 部分中的任何值。 mysqli_num_rows 部分有效,我得到(在这种情况下)3 次迭代。但我看到的只是“列:和 ID:”重复了三遍。 [$a] 部分是否写错了?应该是 $array($a, "column") 还是类似的东西?