Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/66.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
需要帮助在base64编码的MySQL字段中搜索吗_Mysql_Base64 - Fatal编程技术网

需要帮助在base64编码的MySQL字段中搜索吗

需要帮助在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

我试图在MySQL字段中找到一个用base64编码的字符串(用于国际字符)

常用搜索:

$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()
函数,就无法进行部分
匹配。