【发布时间】:2017-01-04 03:47:51
【问题描述】:
我在 codeigniter 中使用 sha2 哈希函数编写了一个查询,但生成的查询没有正确形成。
这是我的模型代码:
public function validate_user($data = NULL)
{
$email = $data["email"];
$password = $data["password"];
$this->db->select('user_id');
$query = $this->db->get_where('users', array('sha2(username, NULL)' => $data["username"], 'password' => $password));
return $query->row_array();
}
这是我遇到的错误(由于查询格式错误):
You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near ''FCD8FE02F495400DC020499AC31FC75ABA05005622FD7A2F01D37153724CB395' AND `password' at line 3
SELECT `user_id` FROM `users` WHERE sha2(username, NULL) 'FCD8FE02F495400DC020499AC31FC75ABA05005622FD7A2F01D37153724CB395' AND `password` = '2668dcd9bac3c8bb60742f139876d1d6'
为什么= 符号不在sha2(username, NULL) 和'FCD8FE02F495400DC020499AC31FC75ABA05005622FD7A2F01D37153724CB395' 之间
实际的查询结果应该是:
SELECT `user_id` FROM `users` WHERE sha2(username, NULL) = 'FCD8FE02F495400DC020499AC31FC75ABA05005622FD7A2F01D37153724CB395' AND `password` = '2668dcd9bac3c8bb60742f139876d1d6'
而不是:
SELECT `user_id` FROM `users` WHERE sha2(username, NULL) 'FCD8FE02F495400DC020499AC31FC75ABA05005622FD7A2F01D37153724CB395' AND `password` = '2668dcd9bac3c8bb60742f139876d1d6'
任何想法我做错了什么?
【问题讨论】:
-
用户名是存储为普通用户名还是 sha2() 值?
-
感谢您的回复 Tpojka。用户名以纯文本形式存储在数据库中,但我的客户端将发送用户名的 sha256,所以我想检查它的唯一方法是使用 mysql 的 sha2 函数(原因是我正在检查,我意识到sha256 值客户端发送和 mysql 生成的 sha2 是相同的,给定一个特定的用户名)
-
在我的查询中,我在单引号内写了
sha2(username, NULL),以便将它原样传递给mysql,这样mysql就会运行它自己的sha2函数来生成用户名的哈希跨度>
标签: php mysql codeigniter hash sha256