【问题标题】:Comparing MD5 of a field results NULL比较字段结果 NULL 的 MD5
【发布时间】:2014-04-24 04:24:43
【问题描述】:

我有一个函数来计算哪个输入用户ID的MD5并输出id,name

public function verifyUser($enc)
{
    //echo $enc;
    $query = $this->db->prepare("SELECT id,name FROM `users` WHERE MD5(`id`) = '$enc'");
    //$query->bindValue(1,$enc);
    $query->execute();
    $data = $query->fetch();
    //var_dump($query);
    return $data;
}

但是上面的查询总是返回NULL。

例如,我有一个用户 id=2MD5(2)c81e728d9d4c2f636f067f89cc14862c。它生成的查询是:

SELECT id,name FROMusersWHERE MD5(id) = 'c81e728d9d4c2f636f067f89cc14862c'

但是虽然用户退出了,结果却是null。

【问题讨论】:

  • 您的查询是返回一个空的结果集还是您的 id 和 name 为 NULL?
  • 另外,您似乎已经注释了bindValue部分并且没有发送参数$enc的值。
  • 您是否尝试过手动评估它(将您的查询粘贴到 phpMyadmin 等)。 here is a sample 因为它的工作。 md5(2)
  • 查询按预期工作。检查这个小提琴:sqlfiddle.com/#!2/e262d/1

标签: php mysql sql md5


【解决方案1】:

单独的查询按预期工作。检查这个 SQLFiddle:http://sqlfiddle.com/#!2/e262d/1

但是,以下行似乎有一些问题。试试这个更正的:

$query = $this->db->prepare("SELECT id, name FROM users WHERE MD5(id) = '$enc'");

注意:我已经删除了您代码中围绕用户和 id 的错误引号字符。

【讨论】:

  • 是的,查询返回所需的 o/p。但是当我 var_dump 查询时,它的输出类似于SELECT id, name FROM users WHERE MD5(id) = ' c81e728d9d4c2f636f067f89cc14862c '
  • 它产生的空白导致我认为的错误
  • 似乎是问题所在。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-06-13
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多