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'; 

} 


} 
+3

首先您应该更改为MySQLi/PDO,因为您使用的是折旧技术,请参阅http://php.net/manual/en/mysqlinfo.api.choosing.php –

+0

其次,此代码易受攻击SQL注入请参阅:https://en.wikipedia.org/wiki/SQL_injection – UnkwnTech

+1

第三次传递$ con对象,如果你说你连接到mysql_query – RohitS

可能的问题是您的查询失败导致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'。

+0

PHP将替换双引号内的变量。 – UnkwnTech

+0

现在显示的错误是:没有选择数据库。我链接了数据库require('skull/go_db.php');在文件中,但它没有做任何事情。 –

+0

您确定建立了与数据库的连接吗?它应该是这样的: '$ conn = mysqli_connect($ servername,$ username,$ password);' 或者您可以回显此代码,如果它返回false,您无法连接到您的数据库。 – kry