如何匹配逗号分隔字符串与数据库字段并按字符串顺序排序查询结果
实现方案
你可以借助MySQL的FIELD()函数实现自定义排序,该函数会返回字段值在指定参数列表中的位置,以此为排序依据就能和你传入的逗号分隔字符串元素顺序保持一致。同时需要先修复原代码的语法缺陷和注入风险,调整后的代码如下:
// 处理邮箱字符串:去除首尾多余逗号、拆分过滤空值、SQL转义防注入 $email_address = 'test@test.com,test@test2.com,test@test3.com,'; // 去除首尾逗号,拆分数组 $email_arr = explode(',', trim($email_address, ',')); // 过滤空值,对每个邮箱做转义处理 $email_arr = array_filter(array_map(function($item) use ($db_conx) { return mysqli_real_escape_string($db_conx, $item); }, $email_arr)); // 拼接IN查询条件、排序参数 $param_str = "'" . implode("','", $email_arr) . "'"; // 构造SQL,添加ORDER BY FIELD自定义排序 $sql = "SELECT id,company_ref,name FROM employee WHERE email_address IN ({$param_str}) ORDER BY FIELD(email_address, {$param_str})"; $result = mysqli_query($db_conx, $sql); $total = mysqli_num_rows($result);
补充说明
FIELD(email_address, 邮箱1, 邮箱2, 邮箱3...)会按邮箱在参数列表中的先后顺序生成排序权重,查询结果顺序和你传入的逗号分隔字符串完全一致- 新增了
mysqli_real_escape_string转义逻辑,避免SQL注入风险 - 修复了原代码中字符串变量赋值缺少引号、末尾多余逗号生成无效空值查询条件的问题
内容的提问来源于stack exchange,提问作者Ausy
相关产品推荐
相关产品推荐

