首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >PHP/MySQL -将数据库值转换为MD5,然后收缩到该值的一部分?

PHP/MySQL -将数据库值转换为MD5,然后收缩到该值的一部分?
EN

Stack Overflow用户
提问于 2014-04-08 09:36:55
回答 1查看 262关注 0票数 0

我使用PHP和MySQL从一个值创建一个字符串,然后将其与相同值的MD5哈希进行比较。

例如,在MySQL中,我有一个字符串值:somerandomvalue

在PHP中,我获取该字符串值并将其传递给一个局部变量以保存字符串值:$prdAlias

我将字符串值转换为MD5哈希值:

代码语言:javascript
复制
$prdAlias = md5($prdAlias);

然后,我只使用该值的前6个字符,以便以后使用:

代码语言:javascript
复制
$prdAlias = mb_substr($prdAlias, 0, 6);

后来

我有MD5值的前6个字符,我称之为:$prdAlias

现在,在MySQL中,我希望将$prdAlias与我开始使用的值:somerandomvalue进行比较。为此,我必须将数据库中的值转换为MD5哈希,然后只接受哈希的前6个字符,并将其与$prdAlias进行比较。

所以我有一份预先准备好的声明:

代码语言:javascript
复制
if ($stmt = $link->prepare("
    SELECT alias
    FROM `products`
    WHERE alias = ?
"))
{
    ... ETC
}

我现在的问题是在这个语句中,我如何将别名值转换为MD5,并在WHERE子句中只使用其中的前6个字符?

任何帮助都将不胜感激,谢谢!

编辑:我目前正在运行一个while循环,并通过处理每一行来检查值,直到找到匹配为止.这对于成千上万行的人来说并不理想。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2014-04-08 09:46:05

您可以使用mysql MD5()函数在数据库服务器上执行此操作:

代码语言:javascript
复制
WHERE LEFT(MD5{alias), 6) = ?

但是,这仍然需要一个完整的表扫描,所以基本上是相同的,你的时间循环。如果你想要这个速度快,你需要一个索引。我认为mysql没有计算索引,这意味着您必须为别名的md5的前六个字符添加一列并与之进行比较。

不过,我会亲自存储整个散列并执行LIKE "123456%"。只是一种直觉,从长远来看可能会更聪明。另一方面,如果您只存储前六个字符,则可以在该列中添加一个唯一的键,并在早期检测冲突。

票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/22933118

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档