【发布时间】:2017-11-26 13:18:41
【问题描述】:
所以在我的服务器中我有:
app.get('/getposts/:pageno', (req, res) => {
let pageno = req.params.pageno
connection.query('SELECT * FROM mytable LIMIT ? , 3', [pageno], function(err, rows, fields){
if(err){
console.log(err);
}
res.send(rows);
console.log(pageno);
});
});
当我尝试访问它时:http://localhost:3000/getposts/2
我得到错误:
{ Error: ER_PARSE_ERROR: You have an error in your SQL syntax; check the manual that
corresponds to your MariaDB server version for the right syntax to use near ''2' , 3'
code: 'ER_PARSE_ERROR',
errno: 1064,
sqlMessage: 'You have an error in your SQL syntax; check the manual that
corresponds to your MariaDB server version for the right syntax to use near
\'\'2\' , 3\' at line 1',
sqlState: '42000',
index: 0,
sql: 'SELECT * FROM mytable LIMIT \'2\' , 3' }
pageno 已登录控制台。我将 LIMIT 的第一个参数作为? [pageno] 传递,如他们的official notes 中所述,如果我在LIMIT 2,3 中键入2 或任何其他数字,它就可以工作。我在表中有超过一千个虚拟记录。
也试过了
var sql = 'SELECT * FROM mytable LIMIT ' + connection.escape(pageno) + ', 3';
并在connection.query 中使用了sql,但同样的错误。
我做错了什么?请帮忙。
【问题讨论】:
-
错误说它打印为 \'2\' 。打印时得到了什么?你可以试试 parseInt() 的 pageno
-
成功了!我做了
var newPageNo = parseInt(pageno)并改用newPageNo并且它起作用了。问题是什么?当我做console.log(pageno)时,我得到了一个纯粹的int。 -
很高兴它起作用了我不能在不检查整个代码的情况下说出确切的原因,我的意思是数据是如何来的以及您使用的是哪个 npm 等。但这始终是一个好习惯使用正确的类型。如果不是数值,则返回失败的响应。请将此标记为已解决。
-
GET 参数值始终是字符串(因为查询字符串“is”只是文本,没有机制可以指定任何 type 值),任何使用严格类型的应用程序都需要如有必要,自行转换。您的数据库类显然会自动检查给定参数的类型,并将其插入到相应生成的 SQL 查询中。
-
“当我执行 console.log(pageno) 时,我得到了一个纯 int。” - 它实际上在任何地方都说“int(eger)”吗?不知道 node.js 控制台,但至少在客户端的 Chromium 中,
console.log("2", 2);只会导致2 2,第一个是黑色的,第二个是蓝色的......我怀疑我会注意到如果我只看到一个值,那么“差异”。
标签: mysql node.js node-mysql