node-red,MySQL错误

时间:2017-10-23 08:28:59

标签: mysql node-red

写入数据库时​​出错

它的功能:

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\")" 

它完美地运作......

诀窍在哪里?

2 个答案:

答案 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;