写入数据库时出错
它的功能:
var newMsg = { payload: msg.payload };
newMsg.topic="insert into MyTable (a,b,c,d,e,f,g) values (newMsg.payload)"
传入的有效负载调试显示
payload: "B0:AC:A2:AC:07:F4","Ready","893901","860990","online","876","333"
我从数据库节点(nore-red-node-mysql)获得的错误是
"错误:ER_WRONG_VALUE_COUNT_ON_ROW:列数与值不匹配 算在第1行"
对我来说奇怪的是,如果我尝试一下
newMsg.topic="insert into MyTable (a,b,c,d,e,f,g) values (\"B0:AC:A2:AC:07:F4\",\"Ready\",\"893901\",\"860990\",\"online\",\"876\",\"333\")"
它完美地运作......
诀窍在哪里?
答案 0 :(得分:0)
没有技巧。
这是因为 node-red-node-mysql 和 node-red-contrib-sqldbs 节点不进行任何查询替换。
这意味着发送到数据库的内容正是msg.topic
字段中的内容。在这种情况下可能是:
insert into MyTable (a,b,c,d,e,f,g) values (newMsg.payload)
将mysql读取为尝试将单个值传递给期望7个值的查询。
在将消息传递给数据库节点之前,您必须在函数节点中构建完整查询(并在需要时执行自己的变量转义)。
答案 1 :(得分:0)
最后我用这种方式解决了:
var data = msg.payload.split(",");
msg.payload = {};
msg.payload.a=data[0];
msg.payload.b=data[1];
msg.payload.c=data[2];
msg.payload.d=data[3];
msg.payload.e=data[4];
msg.payload.f=data[5];
msg.payload.g=data[6];
insert into MyTable (a,b,c,d,e,f,g) values ('" + data[0] + "','" + data[1] + "','" + data[2] + "','" + data[3] + "','" + data[4] + "','" + data[5] + "','" + data[6] + "')";
return msg;