我正在创建一个新的登录脚本/成员目录。
我在没有任何框架的情况下从零开始创建它(对此事的建议也将受到赞赏)。
情况:
// Look up the username and password in the database
$query = "SELECT admin_id, username FROM admin WHERE adminname = '$admin_user' AND password = SHA1('$admin_pass')";
$data = mysqli_query($dbc, $query);
if (mysqli_num_rows($data) == 1) {
这段代码不断给我一个错误(特别是最后一行):
Warning: mysqli_num_rows() expects parameter 1 to be mysqli_result, boolean given in /home8/craighoo/public_html/employees/security/dir_admin.php on line 20
当回应查询时,我得到:
SELECT admin_id, adminname FROM admin WHERE adminname = 'admin' AND password = SHA1('password')
编辑: 谢谢大家。问题出在我的数据库列名和我引用的列名中。
答案 0 :(得分:3)
您的查询执行失败。当发生这种情况时mysqli_query
返回false
(布尔值),并且何时传递给mysqli_num_rows
,您会收到此错误。
在执行前打印查询并检查是否正确。
答案 1 :(得分:2)
考虑到mysqli_query
在失败时返回false
,并且$ data是布尔值,在这里,我认为在执行SQL查询期间发生了错误。
您可以尝试使用mysqli_error
找出此错误:
$data = mysqli_query($dbc, $query);
if ($data !== false) {
// Do whatever you want with $data
if (mysqli_num_rows($data) == 1) {
//
}
} else {
echo mysqli_error($dbc);
die;
}
注意:回显错误信息和死亡,就像我在这里做的那样,在开发脚本时是可以的;但你不应该在生产中这样做。
相反,在制作中,你应该:
答案 2 :(得分:1)
当你有一个关键的查询时,最好像这样添加一个骰子:
mysqli_query($dbc, $query) or die('Critical error on line #'. __LINE__ .' when attempting to login ...<br>'. mysql_error());
答案 3 :(得分:0)
您是否尝试通过phpmyadmin或控制台手动运行相同的查询?你得到了什么结果?