我有一个带有Express的(当前为本地主机,但即将通过AWS)Node.JS服务器,当遇到以下错误时,我试图通过MySQL查询更新RDS实例:
{ [Error: ER_PARSE_ERROR: You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near ''history0' = 'http://localhost:3000/' WHERE id = 1' at line 1]
code: 'ER_PARSE_ERROR',
errno: 1064,
sqlMessage: 'You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near \'\'history0\' = \'http://localhost:3000/\' WHERE id = 1\' at line 1',
sqlState: '42000',
index: 0,
sql: 'UPDATE infected SET \'history0\' = \'http://localhost:3000/\' WHERE id = 1;' }
导致错误的POST请求:
app.post('/history', function(req, res) {
var hist = 'history' + 0;
var sql = 'UPDATE infected SET ? = ? WHERE id = ?;';
connection.query(sql, [hist, req.body[0].url, 1]);
});
我将hist
用作变量是因为我打算将其循环处理,但是我不确定在这里声明它的方式是否会引起问题,所以我将其保留为原样。 。 req.body
是JSON.stringify()
的调用中调用的chrome.history.search()
的输出。因此,我试图获取索引为0的条目的URL。
我尝试使用硬编码字符串直接调用connection.query
,如下所示:
connection.query("UPDATE infected SET history0='google.com' WHERE id='1'");
它成功更新了数据库,所以我认为如何使用问号将变量hist
和req.body[0].url
插入查询中存在问题,但我不知道问题是什么。
答案 0 :(得分:1)
尝试使用双“ ??”键,方法是:
app.post('/history', function(req, res) {
var hist = 'history' + 0;
var sql = 'UPDATE infected SET ?? = ? WHERE id = ?;';
connection.query(sql, [hist, req.body[0].url, 1]);
});