使用mysql2,我正在解析来自endpoint的json响应,并在mysql数据库中插入它的一些值。我现在要做的是将这个响应记录在我的数据库的一个表中。我接收的json包含在一个名为data
的变量中,我可以正确访问它的值,如data.object.account_country
等等。
data
是一个有效的json,如下所示(为保护隐私而修剪):
{
"object": {
"id": "in_1IYxloLuHwfLSa62Zjqz5jX5",
"object": "invoice",
"account_country": "IT",
}
}
现在,我想将整个json存储在mysql的日志表中,因此我在表中创建了一个json列,并尝试插入json。
我的查询如下所示:
con1.query(“insert INTO webhook_log SET tipo='”+eventtype+“‘,risposta='”+data+“’,created_on=now()”,function(err,result){if(err)throw err;console.log(%1+“”Webhook logged
);});
这将引发以下错误:
{错误:无效的JSON文本:“无效的值.”位于列'webhook_log.risposta'的值中的位置1。
我还尝试删除数据周围的单引号,但在本例中,我得到了:
{错误:您的SQL语法有错误;请查看与您的MySQL server版本相对应的手册,了解第1行“[object object],created_on=now()'附近使用的正确语法
很明显,我在这里做错了什么,但我不能指出这个错误。
根据上面的注释,答案是使用JSON.stringify
将Javascript对象转换为JSON字符串。
还要使用SQL查询参数。一旦你掌握了它的诀窍,它实际上比做字符串连接和眼睛疲劳试图平衡所有的引号要容易得多。
con1.query("INSERT INTO webhook_log SET tipo=?, riposta=?, created_on=now()",
[eventType, JSON.stringify(data)],
function(err,result){ if(err) throw err; console.log(🔔 Webhook logged); });