MySQL - 在WHERE子句中使用SHA2

时间:2014-08-20 20:53:57

标签: mysql sha256

提前谢谢!所以这是我的查询

$query = "
        SELECT
            A.id
            U.email,
            SHA2(U.email, 256) AS sha
        FROM S.Action A
        LEFT JOIN S.Users U
            ON U.ID = A.id
        WHERE A.id = ". $id ."
        ";

哪种方法正常,'sha'具有预期值。但是,我想要做的是在

中添加此WHERE条件
AND SHA2(U.email, 256) = ". $pass ."

但是一旦输入,查询就返回任何内容。当我在查询返回后转出$ pass和'sha'时,没有那个WHERE条件,它们匹配。但是当我在抓住所有东西之前尝试查看那场比赛时,它什么也没发现。这是我不能做的事情吗?

1 个答案:

答案 0 :(得分:3)

我怀疑在第一个例子中,$userid是一个整数,列id也是某种类型的INT,所以它被强制转换为整数并且工作正常

您要查询的第二个where子句,SHA2函数的结果显然不是整数而是字符串,因此它应该在引号中:

   $query = "
       SELECT
        A.id
        U.email,
        SHA2(U.email, 256) AS sha
       FROM S.Action A
       LEFT JOIN S.Users U
        ON U.ID = A.id
        WHERE A.id = ". $id ." AND SHA2(U.email, 256) = '".$pass."'";   

请注意,如果此输入来自用户输入,您将要使用参数,而不是像上面那样将查询连接在一起。这可能会使您的网站受到SQL注入攻击。