我只是想写一个简单的脚本来验证尝试登录的用户的用户名和密码......,然后启动会话。但是,我遇到了一些麻烦。
当我尝试运行下面的脚本时,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.'