我试图搜索包含用户数据的MSSQL表。我最感兴趣的两列是用户名和密码。密码列是二进制(20)数据类型,包含由
生成的数据 HashBytes('SHA1','Password')
这是我正在制作的电话,没有成功。我错过了什么?
$select_user=sqlsrv_prepare($connection,"
SELECT
id, username
FROM
dbo.users
WHERE
username=? AND password=HashBytes('SHA1',?)",
array(&$username, &$password));
答案 0 :(得分:0)
您的帖子中没有任何内容表明您正在做任何会阻止您的查询工作的内容。
CREATE TABLE T (
usr VARCHAR(100),
pwd BINARY(20)
);
INSERT INTO T
(usr, pwd)
VALUES
('john', HashBytes('SHA1', 'john-pwd'))
INSERT INTO T
(usr, pwd)
VALUES
('jane', HashBytes('SHA1', 'jane-pwd'))
这是一个示例查询:
DECLARE @pwd AS VARCHAR(100)
DECLARE @usr AS VARCHAR(100)
SET @usr = 'john'
SET @pwd = 'john-pwd'
-- search for john's record by username & password
SELECT *
FROM T
WHERE usr = @usr
AND pwd = HashBytes('SHA1', @pwd)
这是一个SQL Fiddle链接,显示了一个工作示例:http://sqlfiddle.com/#!6/45766/2/0
usr | pwd
------+----------------------------------------
john | kwRrA4hNLaWscG4RJMRy/9k43sM=
您可以缓存查询的哈希密码,但除此之外,查询应该可以正常工作。