SQL SELECT命令的常见问题
问题描述:
我想进行登录,但会一直显示错误。我检查SQL的SELECT形式并尝试做同样的事情,但问题根本无法解决。这将是非常好的,如果有人帮助我,谢谢。数据库已连接并可以使用。SQL SELECT命令的常见问题
这是错误:mysql_num_rows()预计参数1是资源,在布尔C中给出:\ XAMPP \ htdocs中\ UNIWIX \ login.php中上线14
这是代码:
if(isset($_POST['submit'])){
$email = mysql_escape_string($_POST['email']);
$password = mysql_escape_string($_POST['password']);
$sql = mysql_query("SELECT * FROM users WHERE email='$email' AND password = '$password' ");
if(mysql_num_rows($sql) > 0){ (line 14)
echo "you are now logged in";
exit();
}else{
echo 'wrong email or password';
}
}
答
可能的问题是您的查询失败导致mysql_query返回false
。如果您在第13行快速执行var_dump($sql);
,我怀疑您会看到类似bool(false)
的回复。
+0
我明白了,但为什么它保持返回错误?我的表格用户存在,'email'和'password'也存在。感谢您快速回答。 –
答
"SELECT * FROM users WHERE email='$email' AND password = '$password' "
您是否知道,$ email和$ password是主字符串的一部分?如果你尝试运行这个SQL,它可能会给一些垃圾。
首先,您需要用单引号赋值,然后用双引号停止字符串,并将它们与点连接起来。因此,最终的字符串应该是:
"SELECT * FROM users WHERE email = '".$email."' AND password = '".$password."'"
所以它实际上是5个字符串连接在一起,以“”标记每个的开始和结束。请不要在最后输入“'”,因为PHP也应该将最后的'给MySQL'。
首先您应该更改为MySQLi/PDO,因为您使用的是折旧技术,请参阅http://php.net/manual/en/mysqlinfo.api.choosing.php –
其次,此代码易受攻击SQL注入请参阅:https://en.wikipedia.org/wiki/SQL_injection – UnkwnTech
第三次传递$ con对象,如果你说你连接到mysql_query – RohitS