You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何用PHP和SQL查询Base64编码的用户名?尝试FROM_BASE64无效

问题

需要用PHP和SQL查询users表中用户名匹配指定关键词的记录,原代码示例如下:

$search = "cat";
$sql = "SELECT * FROM users WHERE username LIKE '%$search%'";

但users表的username字段是Base64编码的,示例数据:

username解码后
UG9zdGUgSsOh=cat
U2FtcGFpbw==dog
RWxsZW4=bird

尝试使用FROM_BASE64和TO_BASE64函数但未成功,求正确实现方法。

正确实现方法

1. 核心SQL逻辑

要匹配解码后的用户名,需先用FROM_BASE64()函数把存储的Base64字段解码,再和关键词做模糊匹配。如果存储的Base64字符串带有多余空格,要先通过TRIM()清理:

SELECT * FROM users WHERE FROM_BASE64(TRIM(username)) LIKE '%cat%'

2. 结合PHP的安全实现

直接拼接变量到SQL会存在注入风险,必须使用预处理语句:

PDO实现

$search = "cat";
$searchParam = "%{$search}%";
$sql = "SELECT * FROM users WHERE FROM_BASE64(TRIM(username)) LIKE ?";

$pdo = new PDO('mysql:host=localhost;dbname=your_db', 'user', 'pass');
$stmt = $pdo->prepare($sql);
$stmt->execute([$searchParam]);
$results = $stmt->fetchAll(PDO::FETCH_ASSOC);

mysqli实现

$search = "cat";
$searchParam = "%{$search}%";
$sql = "SELECT * FROM users WHERE FROM_BASE64(TRIM(username)) LIKE ?";

$mysqli = new mysqli('localhost', 'user', 'pass', 'your_db');
$stmt = $mysqli->prepare($sql);
$stmt->bind_param("s", $searchParam);
$stmt->execute();
$result = $stmt->get_result();
$results = $result->fetch_all(MYSQLI_ASSOC);

3. 为什么用TO_BASE64不行?

如果尝试把关键词转成Base64再匹配,会因为Base64的编码特性失效:同一个字符串的子串转Base64后,和原字段Base64的子串没有对应关系。比如cat的Base64是Y2F0,但存储的UG9zdGUgSsOh=解码后是cat,它的Base64字符串里并没有Y2F0,因此这种方式无法查到结果。

内容的提问来源于stack exchange,提问作者Bruno

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.24 14:25:05