需要帮助在base64编码的MySQL字段中搜索吗
我试图在MySQL字段中找到一个用base64编码的字符串(用于国际字符) 常用搜索:需要帮助在base64编码的MySQL字段中搜索吗,mysql,base64,Mysql,Base64,我试图在MySQL字段中找到一个用base64编码的字符串(用于国际字符) 常用搜索: $sql = "SELECT * FROM table WHERE field LIKE '%term%' "; 我试过这个: $sql = "SELECT * FROM table WHERE field name LIKE '%".base64_encode($term)."%' "; 但它并不总是有效,这取决于搜索词的长度。。。出于某种原因,只要我的项是奇数长,它就会给出结果 我还尝试过使用MyS
$sql = "SELECT * FROM table WHERE field LIKE '%term%' ";
我试过这个:
$sql = "SELECT * FROM table WHERE field name LIKE '%".base64_encode($term)."%' ";
但它并不总是有效,这取决于搜索词的长度。。。出于某种原因,只要我的项是奇数长,它就会给出结果
我还尝试过使用MySQL函数到\u BASE64()
和从\u BASE64()到,但都不起作用
有人能帮忙吗?您需要将输入值与base64解码存储值进行比较,因此请将您尝试从存储值上的\u base64()
调用,并与普通输入值进行比较。如果对$term
中的部分匹配进行了编码,则无法对其进行比较,因为该部分值永远不会生成与完整存储值相同甚至相似的base64字符串
SELECT * FROM `table` WHERE FROM_BASE64(`field`) LIKE '%$term%'
在此上下文中,$term
是一个普通字符串,而不是base64编码的。当然,建议将$term
作为绑定参数,而不是连接到查询中的普通PHP变量
但是,这将是一个缓慢的过程。如果您需要更改数据的存储方式,我们强烈建议您以普通的未编码形式存储数据。每个查询都需要对每一行进行base64解码才能找到匹配的行,这是非常低效的
还要注意的是,这一点,因此可能无法在许多安装中使用。您确实应该更改数据的存储方式以消除编码。如果您不想升级到MySQL 5.6或更高版本,可以使用以下技巧来消除填充问题:
SELECT * FROM `table` WHERE
field LIKE '%" . base64_encode($term) . "%'
OR field LIKE '%" . substr(base64_encode($term .'a'),0,-4) . "%'
OR field LIKE '%" . substr(base64_encode($term .'aa'),0,-8) . "%'
OR field LIKE '%" . substr(base64_encode($term .'aaa'),0,-12) . "%'
因此避免了搜索词长度问题。根据$term
的长度,您可以仅使用四个中的一个来优化此查询。我在PhpMyAdmin中收到此错误消息:#1305-函数sameez.FROM_BASE64不存在。。。所以我猜这意味着我没有运行所需的MySQL版本?没错。您可以执行简单的相等性测试“其中列=”。base64_编码($term)。“'”
来测试完整编码的输入字符串是否匹配,但是如果不访问FROM_BASE64()
函数,就无法进行部分匹配。