PHP错误 - 登录脚本

时间:2010-04-14 17:55:38

标签: php sql login

我正在创建一个新的登录脚本/成员目录。

我在没有任何框架的情况下从零开始创建它(对此事的建议也将受到赞赏)。

情况:

// 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')

编辑: 谢谢大家。问题出在我的数据库列名和我引用的列名中。

4 个答案:

答案 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或控制台手动运行相同的查询?你得到了什么结果?