我使用mysql2解析来自端点的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(`🔔 Webhook logged`);
});
这会引发以下错误:
{错误:无效的JSON文本:"无效值。"位于列"webhook_log.resposta"值的位置1。
我也尝试删除数据周围的单引号,但在这种情况下,我得到了:
{错误:您的SQL语法有错误;请查看与MySQL服务器版本相对应的手册,在第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); });