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
相关产品推荐
相关产品推荐

