选择查询问题 - 用户登录系统


SELECT query trouble - user login system

我只是想写一个简单的脚本来验证尝试登录的用户的用户名和密码......,然后启动会话。但是,我遇到了一些麻烦。

当我尝试运行下面的脚本时,SUCCESS 没有打印出来。但是,好像用户名和密码不正确一样,我知道输入的用户名和密码实际上是正确的。

$username = $_POST['username'];
$password = $_POST['password'];
$result = mysql_query("SELECT * FROM users WHERE username='.$username.' AND password='.$password.'");
while($row = mysql_fetch_array($result)){
    echo 'SUCCESS';
}

但是,当我尝试运行下面的脚本时,成功打印了两次(这是到目前为止我在数据库中的示例用户数),这是正确的。

我想我对上面的 AND mySQL 查询有问题,但是,对我来说似乎是正确的......我上面的第一个查询有问题吗?如果不是,那么还有什么问题?

$username = $_POST['username'];
$password = $_POST['password'];
$result = mysql_query("SELECT * FROM users");
while($row = mysql_fetch_array($result)){
    echo 'SUCCESS';
}

您正在解析变量,而不是连接它们,您不需要.

"SELECT * FROM users WHERE username='$username' AND password='$password'"
username是一个

受保护的关键字,请尝试以下操作:

$result = mysql_query("SELECT * FROM `users` WHERE `username`='$username' AND `password`='$password'");

忽略 SQL 注入漏洞,您错误地构造了查询字符串:

$result = mysql_query("SELECT * FROM users WHERE username='.$username.' AND password='.$password.'");
                                                           ^         ^

您仍处于"字符串模式",其中指示的句点是(密码部分也是如此),因此您将文本句点嵌入到查询字符串中,而不是执行字符串串联。

远程周期,你会过得更好(但仍然容易受到 sql 注入的影响):

$result = mysql_query("SELECT * FROM users WHERE username='$username' AND password='$password'");

试试这个:

$result = mysql_query("SELECT * FROM users WHERE username='"$username'" AND password='"$password'"");

显然,这不是插入数据的好方法。您应该查看 mysqli 以至少插入数据。

试试这一行:

$result = mysql_query("SELECT * FROM `users` WHERE `username`='".$username."' AND `password`='".$password."'");

请注意我添加的额外",然后才找到'.$username.'