我正在尝试在以base64编码的MySQL字段中找到一个字符串(用于国际字符)
常规搜索:
$sql = "SELECT * FROM table WHERE field LIKE '%term%' ";
Run Code Online (Sandbox Code Playgroud)
我已经试过了:
$sql = "SELECT * FROM table WHERE field name LIKE '%".base64_encode($term)."%' ";
Run Code Online (Sandbox Code Playgroud)
但是它并不总是有效,这取决于搜索词的长度。由于某种原因,只要我的词长为奇数,它就会给出结果。
我也尝试过使用MySQL函数TO_BASE64(),但FROM_BASE64()该方法不起作用...
有人可以帮忙吗?
您需要将输入值与base64解码后的存储值进行比较,因此,请稍稍尝试一下以调用FROM_BASE64()存储值,然后将其与纯输入值进行比较。如果对部分匹配进行了$term编码,则无法进行比较,因为部分值将永远不会产生与完整存储值相同或什至相似的base64字符串。
SELECT * FROM `table` WHERE FROM_BASE64(`field`) LIKE '%$term%'
Run Code Online (Sandbox Code Playgroud)
在这种情况下,$term是纯字符串,不是base64编码的。当然建议$term其作为绑定参数,而不是串联到查询中的纯PHP变量。
但是,这将很慢。如果您可以更改数据的存储方式,强烈建议您以纯净的未编码形式存储数据。每个查询都需要对每一行进行base64解码才能找到匹配的行,这效率极低。
还要注意,这些TO_BASE64(),FROM_BASE64()是MySQL 5.6.1中最近添加的,因此在许多安装中可能不可用。您确实应该更改数据存储方式以消除编码。