【发布时间】:2013-12-29 15:58:43
【问题描述】:
当我尝试使用 node-mysql 在 MYSQL 数据库上调用查询时,我遇到了解析错误。我很确定查询有效。毫无疑问,它通过 phpmyadmin 运行。
Message.save = function(message, callback){
db.query("INSERT INTO e_message (chatid, message, userid) VALUES(" + message.chatid + ", '" + message.message +"', " + message.userid + "); SELECT * FROM e_message WHERE chatid = " + message.chatid + " ORDER BY timestamp DESC LIMIT 0, 1;",
function(err, rows, fields){
console.log(err);
callback(err, new Message(rows[0]));
});
}
我收到以下错误:
{ [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 'SELECT * FROM e_message WHERE chatid = 1 ORDER BY timestamp DESC LIMIT 0, 1' at line 1]
code: 'ER_PARSE_ERROR',
errno: 1064,
sqlState: '42000',
index: 0 }
通过console.log()查询看起来像这样:
INSERT INTO e_message (chatid, message, userid) VALUES(1, 'test123', 1);
SELECT * FROM e_message WHERE chatid = 1 ORDER BY timestamp DESC LIMIT 0, 1;
我不知道这有什么问题......
编辑: 如果我把它分成两个查询,我会得到我想要的结果:
Message.save = function(message, callback){
db.query("INSERT INTO e_message (chatid, message, userid) VALUES(" + message.chatid + ", '" + message.message +"', " + message.userid + ");", function(err, rows, fields){
db.query("SELECT * FROM e_message WHERE userid = " + message.userid + " AND chatid = " + message.chatid + " ORDER BY timestamp DESC LIMIT 0, 1;", function(err, rows, filds){
callback(err, new Message(rows[0]));
});
});
}
谢谢!
【问题讨论】:
-
在一个查询中执行 2 条 sql 语句会不会有问题?尝试先将它们分成两个查询,看看是否有帮助。
-
将您的查询分成 2 个查询。有 2 个单独的查询。
-
另外,在查询方法中尝试使用数组参数,这样更简洁,而且还可以为你进行字符串转义。
-
如果我将其拆分为两个查询并且两个用户同时保存一条消息,则结果可能不正确。 (因为节点是异步的......)编辑:好的,我可以过滤用户 ID 来解决这个问题。
标签: javascript mysql node.js node-mysql