我只是想编写一个简单的脚本来验证尝试登录的用户的用户名和密码...然后启动会话。但是,我遇到了一些麻烦。
当我尝试运行下面的脚本时,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';
}
答案 0 :(得分:3)
,试试这个:username
是受保护的关键字
$result = mysql_query("SELECT * FROM `users` WHERE `username`='$username' AND `password`='$password'");
答案 1 :(得分:3)
您是parsing variables,而不是concatenating他们,您不需要.
。
"SELECT * FROM users WHERE username='$username' AND password='$password'"
答案 2 :(得分:3)
忽略差距SQL injection漏洞,您错误地构建了查询字符串:
$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'");
答案 3 :(得分:2)
请改为尝试:
$result = mysql_query("SELECT * FROM users WHERE username=\"$username\" AND password=\"$password\"");
显然,这不是插入数据的好方法。您应该查看mysqli以至少插入数据。
答案 4 :(得分:1)
尝试这一行:
$result = mysql_query("SELECT * FROM `users` WHERE `username`='".$username."' AND `password`='".$password."'");
请注意我添加的额外"
。之后才查找'.$username.'