我使用PHP和MySQL从一个值创建一个字符串,然后将其与相同值的MD5哈希进行比较。
例如,在MySQL中,我有一个字符串值:somerandomvalue
在PHP中,我获取该字符串值并将其传递给一个局部变量以保存字符串值:$prdAlias
我将字符串值转换为MD5哈希值:
$prdAlias = md5($prdAlias);然后,我只使用该值的前6个字符,以便以后使用:
$prdAlias = mb_substr($prdAlias, 0, 6);后来
我有MD5值的前6个字符,我称之为:$prdAlias
现在,在MySQL中,我希望将$prdAlias与我开始使用的值:somerandomvalue进行比较。为此,我必须将数据库中的值转换为MD5哈希,然后只接受哈希的前6个字符,并将其与$prdAlias进行比较。
所以我有一份预先准备好的声明:
if ($stmt = $link->prepare("
SELECT alias
FROM `products`
WHERE alias = ?
"))
{
... ETC
}我现在的问题是在这个语句中,我如何将别名值转换为MD5,并在WHERE子句中只使用其中的前6个字符?
任何帮助都将不胜感激,谢谢!
编辑:我目前正在运行一个while循环,并通过处理每一行来检查值,直到找到匹配为止.这对于成千上万行的人来说并不理想。
发布于 2014-04-08 09:46:05
您可以使用mysql MD5()函数在数据库服务器上执行此操作:
WHERE LEFT(MD5{alias), 6) = ?但是,这仍然需要一个完整的表扫描,所以基本上是相同的,你的时间循环。如果你想要这个速度快,你需要一个索引。我认为mysql没有计算索引,这意味着您必须为别名的md5的前六个字符添加一列并与之进行比较。
不过,我会亲自存储整个散列并执行LIKE "123456%"。只是一种直觉,从长远来看可能会更聪明。另一方面,如果您只存储前六个字符,则可以在该列中添加一个唯一的键,并在早期检测冲突。
https://stackoverflow.com/questions/22933118
复制相似问题