节点红色,MySQL 错误

node-red, MySQL error

写入数据库时​​出错

它的功能:

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)得到的错误是

"Error: ER_WRONG_VALUE_COUNT_ON_ROW: Column count doesn't match value count at 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\")" 

它完美地工作...

秘诀在哪里?

没有技巧。

这是因为 node-red-node-mysqlnode-red-contrib-sqldbs 节点做不做任何查询替换。

这意味着发送到数据库的内容正是 msg.topic 字段中的内容。在这种情况下,应该是:

insert into MyTable (a,b,c,d,e,f,g) values (newMsg.payload)

mysql 将读作试图将单个值传递给需要 7 个值的查询。

在将消息传递到数据库节点之前,您必须在函数节点中构建完整查询(并在需要时进行自己的变量转义)。

最后我是这样解决的:

  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;