问题描述
我正在尝试通过 node-red 将数据发布到数据库中,但出现此错误。
“错误:ER_PARSE_ERROR:您的 sql 语法有错误;请检查与您的 MysqL 服务器版本相对应的手册,以了解在“插入自定义项(custom_id、product_id、paper_id、ribbon_id、custom_qt”处附近使用的正确语法)第 1 行”
这是我使用的功能。
var items = msg.payload.items;
var sql = "";
var template = "insert into customizations(custom_id,product_id,paper_id,ribbon_id,custom_qty,message)";
template += " values(null,'c1','c2','c3','c4','c5')";
for(var i=0;i<items.length;i++){
var cp = template;
cp = cp.replace('c1',items[i].autoId);
cp = cp.replace('c2',items[i].paper_id);
cp = cp.replace('c3',items[i].ribbon_id);
cp = cp.replace('c2',items[i].qty);
cp = cp.replace('c3',items[i].message);
sql += cp;
}
msg.topic = sql;
return msg;
解决方法
值后通常有一个空格,但这可能无关紧要。您将 c2 和 c3 替换了两次。使用 bind variables 而不是文本插值。如果消息等任何字段包含引号,它会为您转义:
connection.query('insert into customizations(product_id,paper_id,ribbon_id,custom_qty,message) values (?,?,?)',[items[i].autoId,items[i].paper_id,items[i].ribbon_id,items[i].qty,items[i].message],...)
,
- 使用替换或任何字符串操作将值插入到 SQL 中是非常糟糕的习惯。阅读您的手册以了解如何
PREPARE
语句一次,然后在循环中执行准备好的语句。 - 您在替换部分混合了
c2
、c3
、c4
和c5
。 - 您的语法错误是 SQL 语句应以分号 (
;
) 结尾