Express+React环境下MySQL带LIMIT查询报1064语法错误求助
解决MySQL LIMIT参数绑定的语法错误问题
看错误日志里生成的SQL,LIMIT '5'这里的5被包裹了单引号,这是问题根源。客户端通过query传递的所有参数都是字符串类型,直接绑定到SQL时会被当作字符串处理,但MySQL的LIMIT子句要求必须跟整数数值,不能是带引号的字符串,所以触发了语法解析错误。
解决方案
把req.query.limit转换成整数类型后再传入参数绑定,修改后的代码如下:
app.get("/Questions", async (req, res) => { // 将limit转为整数,同时设置默认值防止参数缺失或非法 const limit = parseInt(req.query.limit, 10) || 10; const questions = await mySqlQuery( `SELECT * FROM questions WHERE answer >= :minYear AND answer <= :maxYear ORDER BY RAND() LIMIT :limit;`, { minYear: req.query.minYear, maxYear: req.query.maxYear, limit: limit, } ); console.log("Loading question:", req.query); return res.json(questions); });
补充说明
parseInt(req.query.limit, 10)把字符串转成十进制整数,第二个参数10必须添加,避免进制解析错误|| 10用于设置默认值,如果客户端没传limit或者传了非数字值,就用10作为默认返回条数- 转换后limit是数值类型,参数绑定生成的SQL会变成
LIMIT 5,符合MySQL语法要求
内容的提问来源于stack exchange,提问作者WikDao
相关产品推荐
相关产品推荐

