返回空结果集。不明白为什么

时间:2012-04-30 08:40:04

标签: mysql

这是表格。 enter image description here

在phpmyadmin中执行的查询是

SELECT * FROM users WHERE hashed_password = '8c1017982b2032cc059203e3d83dd0ee2e7a86b3'

结果是一个空的结果集。如果查询是 SELECT * FROM users WHERE username='tt' 然后它按预期工作。

为什么?有什么明显的东西让我失踪吗? 使用php的sha1()

对密码进行哈希处理

SELECT * FROM users WHERE hashed_password LIKE '8c1017982b2032cc059203e3d83dd0ee2e7a86b3%'给出空结果集。

“show create table users”的输出

  CREATE TABLE `users` (
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `username` varchar(255) NOT NULL,
  `hashed_password` varchar(255) NOT NULL,
  `favourites` text,
  `ip_address` varchar(40) DEFAULT NULL,
  `enabled` tinyint(1) NOT NULL DEFAULT '1',
  `trust_level` int(11) NOT NULL DEFAULT '0',
  `time_stamp` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
   PRIMARY KEY (`id`)
  ) ENGINE=InnoDB AUTO_INCREMENT=11 DEFAULT CHARSET=latin1

select hashed_password, length(hashed_password) from users的输出 enter image description here

2 个答案:

答案 0 :(得分:1)

您的哈希长度为40个字符(SHA-1看起来像),而您的数据库字段包含42个字符。显然,任何42-char哈希都不会与你提供的40-char字面值相等。此外,似乎两个额外的字符位于哈希的开头(否则LIKE技巧应该有效)。

找出为什么还有两个字符 - 插入哈希的代码可能对此有所了解。

答案 1 :(得分:0)

您可能想要尝试以下内容:

SELECT * FROM users WHERE SHA1(hashed_password) = '8c1017982b2032cc059203e3d83dd0ee2e7a86b3'