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

Node.js中LIKE与IN查询绑定参数异常问题求助

解决SQL参数绑定中LIKE语句的额外单引号问题

嘿,我之前也踩过这个一模一样的坑!你遇到的问题核心是把通配符和参数绑定的逻辑搞混了——当你在SQL语句里写LIKE '%?%'时,数据库驱动会自动给绑定的参数加上单引号做字符串转义,结果就变成了%'buff'%,自然查不到正确结果。

下面给你两种靠谱的解决方案,都是安全且符合参数绑定规范的:

方案1:在应用层拼接通配符后绑定参数

直接把查询关键词和%拼接成完整的字符串,再作为参数传给SQL语句,驱动会正确处理引号:

// 假设你的查询参数来自req.query.search
const searchValue = `%${req.query.search}%`;

// 注意SQL里只写?,不要加额外的引号或通配符
yourDbConnection.query(
  'SELECT * FROM your_table WHERE target_column LIKE ?',
  [searchValue],
  (error, results) => {
    if (error) throw error;
    // 处理查询结果
    console.log(results);
  }
);

这样数据库最终接收到的SQL就是LIKE '%buff%',完全符合预期。

方案2:用数据库函数拼接通配符

如果不想在应用层处理字符串拼接,可以用数据库自带的字符串拼接函数(比如MySQL的CONCAT),让数据库自己把通配符和参数拼起来:

yourDbConnection.query(
  'SELECT * FROM your_table WHERE target_column LIKE CONCAT("%", ?, "%")',
  [req.query.search],
  (error, results) => {
    if (error) throw error;
    console.log(results);
  }
);

这种方式更适合对SQL逻辑有严格要求的场景,同样能避免额外的单引号问题,而且也能防范SQL注入。

关键提醒

绝对不要手动在SQL语句里给?加单引号,也不要用字符串模板直接拼接SQL(比如LIKE '%${searchValue}%')——前者会导致你遇到的单引号重复问题,后者会引入SQL注入的风险,参数绑定的核心就是让驱动帮你处理这些细节!

内容的提问来源于stack exchange,提问作者Alberto José

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.20 09:16:10