我正在设置一个cookie。类似的东西:
$_COOKIE['test'] = SHA1('124'.'mysalt');
现在124是我想要的id。所以在我的MySQL表中,我试图运行如下的查询:
$sql = ("SELECT * FROM users WHERE SHA1(`id`) = '".mysql_real_escape_string($_COOKIE['test'])."'");
如何将“mysalt”添加到SQL查询中?因为我想获得正确的身份。
答案 0 :(得分:4)
使用可以使用Concat()。
SELECT ... Sha1( Concat(`id`, 'mysalt') )=...
答案 1 :(得分:1)
查询应为:
$sql = ("SELECT * FROM users WHERE SHA1(CONCAT(`id`,`mysalt`)) = '".mysql_real_escape_string($_COOKIE['test'])."'");
如果我理解你正在尝试做什么。
答案 2 :(得分:1)
已提供的解决方案可能会正常工作,但您确定要这样做吗?如果字段“id”确实是一个独特的标识,您可以使用“LIMIT 1”来阻止mysql搜索所有项目。另一件事是,为什么不为此使用单独的预先计算字段?我的意思是在每个查询中mysql不必要地计算所有这些sha1值。最后一件事。我不确定你为什么使用你的方法,但我最好的猜测是实现某种会话密钥。我认为这是一个坏主意,原因如下:如果有人持有你的盐,他可以访问你所有的帐户。如果有人嗅到一个“会话”,他可以随时重复使用它。选择弱盐可能会产生严重后果。 HTH。
答案 3 :(得分:0)
使用CONCAT:
$sql = ("SELECT * FROM users WHERE SHA1(CONCAT(`id`,'mysalt')) = '".mysql_real_escape_string($_COOKIE[''test''])."'");