$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条件,它们匹配。但是当我在抓住所有东西之前尝试查看那场比赛时,它什么也没发现。这是我不能做的事情吗?
答案 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注入攻击。