【问题标题】:Codeigniter query not forming properlyCodeigniter 查询未正确形成
【发布时间】: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() 值?
  • 第二个问题,我可以检查(hereheresha1sha224sha256sha384sha512 哈希算法,但没有 sha2 . sha2() 来自哪里?
  • 感谢您的回复 Tpojka。用户名以纯文本形式存储在数据库中,但我的客户端将发送用户名的 sha256,所以我想检查它的唯一方法是使用 mysql 的 sha2 函数(原因是我正在检查,我意识到sha256 值客户端发送和 mysql 生成的 sha2 是相同的,给定一个特定的用户名)
  • 在我的查询中,我在单引号内写了sha2(username, NULL),以便将它原样传递给mysql,这样mysql就会运行它自己的sha2函数来生成用户名的哈希跨度>

标签: php mysql codeigniter hash sha256


【解决方案1】:

这实际上是一个简单的查询,在这种情况下使用 Codeigniter 方法构建语句没有帮助。

尝试使用像这样更简单的绑定查询。

$sql = "SELECT user_id FROM users WHERE sha2(username, 256) = ? AND `password` = ?";
$query = $this->db->query($sql, array($data["username"], $data["password"]));
return $query->row_array();

注意,我在 mysql sha2() 调用中加入了第二个参数。我认为这两个参数都是必需的,如果其中一个缺失或为 null,则 sha2() 返回 null。

【讨论】:

    猜你喜欢
    • 2017-10-09
    • 2021-11-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-04-16
    • 1970-01-01
    • 2019-01-23
    • 1970-01-01
    相关资源
    最近更新 更多