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

Node.js连接MySQL执行模糊查询时出现ER_PARSE_ERROR语法错误求助

解决MySQL模糊查询的ER_PARSE_ERROR问题

嘿,我一眼就看出你这个模糊查询的问题出在哪啦!你把%直接跟在占位符?后面的写法是错的,这会让数据库解析SQL时直接报错——因为占位符替换后,SQL语句会变成类似movie_name = '你的电影名'%,这完全不符合SQL的语法规范,而且模糊查询本来就该用LIKE而不是=呀!

给你两种修复方案,选哪个都行:

方案1:在JS参数里拼接%

把通配符%加到要传入的参数前后(也可以只加前面或后面,看你要前缀匹配、后缀匹配还是全匹配),SQL里只留占位符:

var movieName = request.body.movieName;
// 这里用模板字符串把%和movieName拼在一起
var sql = "SELECT * FROM movie WHERE movie_name LIKE ?";
db.query(sql, [`%${movieName}%`], function (error, result) {
  if(error){
    throw error;
  } else {
    respond.json(result);
  }
});

方案2:用SQL的CONCAT函数拼接

要是不想在JS代码里处理参数,也可以让数据库帮你拼字符串:

var movieName = request.body.movieName;
// 用CONCAT把%和占位符拼起来
var sql = "SELECT * FROM movie WHERE movie_name LIKE CONCAT('%', ?, '%')";
db.query(sql, [movieName], function (error, result) {
  if(error){
    throw error;
  } else {
    respond.json(result);
  }
});

再啰嗦两句为啥原来的写法不行:

你原来写的movie_name = ?%,当数据库替换占位符后,最终的SQL会变成这样:

SELECT * FROM movie WHERE movie_name = '某电影'%

这明显是语法错误嘛!%没被放在字符串里,数据库根本不知道它是通配符。而且就算语法对了,用=的话也识别不了%通配符,必须换成LIKE才能实现模糊匹配哦。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.06 09:19:10