0

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

当我尝试运行下面的脚本时,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';
}
4

5 回答 5

3

username是受保护的关键字,试试这个:

$result = mysql_query("SELECT * FROM `users` WHERE `username`='$username' AND `password`='$password'");
于 2012-05-11T16:07:12.187 回答
3

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

"SELECT * FROM users WHERE username='$username' AND password='$password'"
于 2012-05-11T16:07:56.363 回答
3

忽略巨大的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'");
于 2012-05-11T16:08:26.077 回答
2

试试这个:

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

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

于 2012-05-11T16:07:21.230 回答
1

试试这条线:

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

注意"我在寻找之前添加的额外的'.$username.'

于 2012-05-11T16:08:26.347 回答