现在,我在下面准备好了语句,它有效:
SELECT email, password
FROM Professor
WHERE email = ? AND password = HASHBYTES('SHA1','" + password + "')
p.setString(1, email);
但是当我尝试参数化要由 HASHBYTES 加密的值(在本例中为变量"password")时,会出现某种不返回结果的读取/类型/转换错误。这是不起作用的代码:
SELECT email, password
FROM Professor
WHERE email = ? AND password = HASHBYTES('SHA1', ?)
p.setString(1, email);
p.setString(2, password);
我根本没有收到任何错误消息;结果集在 rowCount 属性中返回"-3"。我正在使用 SQL Server。
像这样传递"密码"占位符:"?"也不起作用。参数化此查询的正确方法是什么?
使用你们指出的信息并研究如何在 SQL Server 中转换类型,我得出了以下代码:
select email, password
from Professor
where email = ?
and password = hashbytes('sha1', convert(varchar, ?))
请验证它是否适合您!
查看此 SQL Server sha1 在预准备语句中给出的值与硬编码字符串不同
附言以这种方式回答,因为我还不能发短信评论。