PHP错误-登录脚本
我正在创建一个新的登录脚本/成员目录 我从零开始创建它,没有任何框架,对此问题的建议也将不胜感激 情况:PHP错误-登录脚本,php,sql,login,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
// 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')
编辑:
谢谢大家。问题出在我的数据库列名和我所引用的列名上。考虑到失败时返回false,并且$data是一个布尔值,在这里,我假设在执行SQL查询期间发生了错误
您可以尝试使用查找此错误的原因:
$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;
}
注意:在开发脚本时,像我在这里做的那样,回显错误消息并死亡是可以的;但你不应该在生产中这样做
相反,在生产中,您应该:
将错误记录到一个文件中
向用户显示一条好消息
考虑到失败时返回false,并且$data是一个布尔值,在这里,我假设在执行SQL查询期间发生了一个错误
您可以尝试使用查找此错误的原因:
$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;
}
注意:在开发脚本时,像我在这里做的那样,回显错误消息并死亡是可以的;但你不应该在生产中这样做
相反,在生产中,您应该:
将错误记录到一个文件中
向用户显示一条好消息
您的查询执行失败。当这种情况发生时,mysqli\u查询返回错误的布尔值,并且当传递给mysqli\u num\u行时,您会得到此错误
在执行之前打印查询并检查其正确性。您的查询执行失败。当这种情况发生时,mysqli\u查询返回错误的布尔值,并且当传递给mysqli\u num\u行时,您会得到此错误
在执行之前打印查询并检查其正确性。您是否尝试过通过phpmyadmin或控制台手动运行相同的查询?您得到了什么结果?您是否尝试过通过phpmyadmin或控制台手动运行相同的查询?您得到的结果是什么?当您有一个关键查询时,最好向其中添加一个骰子,如下所示:
mysqli_query($dbc, $query) or die('Critical error on line #'. __LINE__ .' when attempting to login ...<br>'. mysql_error());
当您有一个关键查询时,最好向其中添加一个骰子,如下所示:
mysqli_query($dbc, $query) or die('Critical error on line #'. __LINE__ .' when attempting to login ...<br>'. mysql_error());
谢谢,我更新了原来的问题,现在正在查看我的SQL。修复了它。谢谢提醒,有时候我忘记了调试的基本规则。谢谢,我更新了原始问题,现在正在查看我的SQL。修复了它。谢谢提醒,有时我忘记了调试的基本规则。谢谢,我更新了原始问题,现在正在查看我的SQL。很高兴看到你修复了你的问题:-谢谢,我更新了原始问题,现在正在查看我的SQL。很高兴看到你修复了你的问题:-我假设你正在使用PHP会话,如果你不应该的话!确保在成功登录后运行session_regenate_id,以防止已知的漏洞。我建议您使用PHP的SHA函数,而不是在数据库中运行SHA哈希,尤其是当数据库服务器位于另一个框中时,因为您是以明文形式将其密码从web服务器发送到数据库,即使它在您的网络中,它仍然是一个漏洞。旁注:您可能希望查看准备好的语句以避免SQL注入攻击。谢谢TravisO!今后我会记住这件事。到时候我可能需要更多的帮助。我假设你正在使用PHP会话,如果不是的话,你应该这样做!确保在成功登录后运行session_regenate_id,以防止已知的漏洞。我建议您使用PHP的SHA函数,而不是在数据库中运行SHA哈希,尤其是当数据库服务器位于另一个框中时,因为您是以明文形式将其密码从web服务器发送到数据库,即使它在您的网络中,它仍然是一个漏洞。旁注:您可能希望查看准备好的语句以避免SQL注入攻击。谢谢TravisO!今后我会记住这件事。到时候我可能需要更多的帮助。