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

Express.js中如何使用字符串数组构建MySQL的LIKE查询语句

问题原因

你原来的写法直接对数组做字符串拼接,JS会默认调用数组的toString()方法,最终生成的SQL语句是u.u_fullname LIKE "%user,country%",完全不符合查询需求,而且直接拼接用户传入的搜索关键词还存在SQL注入风险。


场景1:匹配任意一个搜索关键词(满足其中一个LIKE条件即可)

正确实现(带参数化查询,防注入)

let search = ["user","country"];
// 生成每个关键词对应的LIKE条件模板
const conditions = search.map(() => 'u.u_fullname LIKE ?').join(' OR ');
// 给每个关键词拼接前后的%通配符
const params = search.map(keyword => `%${keyword}%`);
// 最终的查询语句模板
const searchStmnt = `SELECT * FROM 你的表名 u WHERE ${conditions}`;

// 执行查询示例(以mysql2库为例)
const [results] = await connection.execute(searchStmnt, params);

最终执行的等效SQL语句为:

SELECT * FROM 你的表名 u WHERE u.u_fullname LIKE "%user%" OR u.u_fullname LIKE "%country%"

场景2:匹配所有搜索关键词(所有LIKE条件都要满足)

把上述代码里的join(' OR ')改成join(' AND ')即可:

const conditions = search.map(() => 'u.u_fullname LIKE ?').join(' AND ');

注意事项

  • 不要直接把用户输入的搜索内容拼接到SQL语句里,必须用参数化查询的方式传入参数,避免SQL注入漏洞。
  • 如果搜索的字段数据量较大,建议给对应字段加全文索引,用MATCH AGAINST语法代替多个LIKE查询,查询效率会高很多。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.07 14:36:04