3

我有一个有点奇怪的问题,我真的不知道为什么会这样。首先,我尝试使用运行良好的 php 访问数据库。它可以毫无故障地访问它(检查),所以我很确定它的那个区域是正确的。

我正在使用 php 代码访问查询:

mysqli_query($database, "SELECT * FROM user WHERE username = $username AND password =     $password");

它正在访问数据库:

数据库定义

所以这就是问题所在。我正在尝试使用用户名和密码登录。如果我输入了错误的用户名,它会选择它并拒绝它,所以用户名部分没有任何问题。但是,如果我使用正确的用户名和密码,它仍然会因为密码而拒绝它。但是,如果我使用正确的用户名和密码“密码”(与列名相同,我已经尝试使用不同的列名,效果相同),只要用户名正确,它就可以工作。

以前我使用 echo 来确保我输入的用户和密码都被接收到了。

4

1 回答 1

3

改变

mysqli_query($database, "SELECT * FROM user WHERE username = $username AND password = $password");

至:

mysqli_query($database, "SELECT * FROM user WHERE username = '$username' AND password = '$password'");

即在你的字符串周围加上引号。

你可能实际上从数据库中得到了一个错误……所以你也应该检查一下。

编辑:还请注意@MarcelKorpel 关于 SQL 注入的评论/警告。我上面的解决方案更正了您的语法错误。Marcel 的警告纠正了您的方法中的错误;-) 关键是,如果$usernameor$password字符串没有经过清理,最终用户可以(例如)输入 SQL 代码,从而有效地将您的查询字符串更改为(由您)无意的内容这可能是(可能是)恶意的。

于 2013-03-25T11:20:47.757 回答