Mysql 查询 - 返回明显错误的结果

Mysql 查询 - 返回明显错误的结果

我正在构建一个运行 Ubuntu 10.10LTS、Apache2、Mysql 5.1 和 php5 的 VPS 节点。

尽管我使用了正确的登录详细信息,但我无法通过浏览器登录我的网站管理员。因此,我从命令行登录以检查结果。

当我运行此查询时,我得到了预期的结果:

mysql> select * from users;
+----+----------+-----------------------+----------+
| id | username | email                 | password |
+----+----------+-----------------------+----------+
|  1 | myUserName    | [email protected] | myPassword |
+----+----------+-----------------------+----------+

对于这个查询也是如此:

mysql> select * from users where id = 1;
+----+----------+-----------------------+----------+
| id | username | email                 | password |
+----+----------+-----------------------+----------+
|  1 | myUserName    | [email protected] | myPassword |
+----+----------+-----------------------+----------+
1 row in set (0.00 sec)

但是当我运行此查询时,我得到了这个“意外的响应”:

mysql> select * from users where username = 'myUserName' and password = 'myPassword';
Empty set (0.00 sec)

我不知道为什么会发生这种情况。任何帮助都将不胜感激。顺便说一句……我将加密用户详细信息,但现在我只想进行设置。

请帮忙,

谢谢

答案1

只是为了将其转化为答案,根据您的 SQL 查询的格式,看起来您的用户名字段中有空格。即:

mysql> select * from users where id = 1;
+----+----------+-----------------------+----------+
| id | username | email                 | password |
+----+----------+-----------------------+----------+
|  1 | myUserName    | [email protected] | myPassword |
+----+----------+-----------------------+----------+
1 row in set (0.00 sec)

换句话说,用户名字段为id=1myUserName___其中_用于表示空格。这就是为什么当您使用username LIKE 'myUserName%'(表示包括以 开头的所有内容myUserName)时可以正常工作。

答案2

密码也是散列密码的 mysql 函数的名称;我想知道这是否是问题所在?尝试用引号括住表名。

此外,字符串 myUserName 后面似乎有一些空格。我怀疑这表明应用程序出错了。如果你这样做,update users set username='myUserName' where id=1;你可能会发现它有效。

相关内容