【发布时间】:2014-02-15 05:17:42
【问题描述】:
我正在尝试将一些 mysqli 查询重写为准备好的语句(我的第一次尝试)。前两行注释的行是运行良好的旧查询。剩下的就是我尝试编写一个准备好的语句:
//$sql = "SELECT hashed_password FROM Administrators WHERE user_name='$username'";
//$result = mysqli_query($link, $sql);
//switch to prepared statement
$stmt = mysqli_stmt_init($link);
$result = false;
if (mysqli_stmt_prepare($stmt,
'SELECT hashed_password FROM Administrators WHERE user_name=?'))
{
/* bind parameters for markers */
mysqli_stmt_bind_param($stmt, "s", $username);
/* execute query */
$result = mysqli_stmt_execute($stmt);
/* close statement */
//mysqli_stmt_close($stmt);
}
if (!$result) {
mysqli_close($link);
die("Error running query " . mysqli_error($link));
}
if (mysqli_num_rows($result) == 0) {
mysqli_close($link);
echo "No such user";
die();
}
发生的错误在最后一行显示,但显然可以追溯到前面的一行。
谁能告诉我我做错了什么?我直接从 PHP 文档中获取了这个,但显然我遗漏了一些东西。谢谢!
编辑:感谢那些指出我忘记分配查询返回值的人。我已经合并了这些 cmets 并修改了我的代码。但是,我仍然无法成功运行查询。现在我得到这个错误:
Warning: mysqli_num_rows() expects parameter 1 to be mysqli_result, boolean given in /home/content/07/11347607/html/RevRunning/scripts/administration/login.php on line 53
No such user
相信我,我在 UI 中输入的用户确实存在,所以我的代码仍然有问题。再次感谢您的帮助。
【问题讨论】:
-
你有
if (!$result),因为你从来没有设置$result,它总是会调用die(...
标签: php mysqli prepared-statement