Mysql 错误:ER“无效的”JSON“文本:无效的JSON文本:”;无效值。”;在列';的值中的位置1处_数据';。在节点JS中
我想使用节点js的存储过程将JOSN数据/对象插入mysql。首先,我知道有一些类似的问题,但我尝试过,但仍然没有得到结果 这是我第一次使用存储过程和节点js,所以我有了表名Mysql 错误:ER“无效的”JSON“文本:无效的JSON文本:”;无效值。”;在列';的值中的位置1处_数据';。在节点JS中,mysql,node.js,Mysql,Node.js,我想使用节点js的存储过程将JOSN数据/对象插入mysql。首先,我知道有一些类似的问题,但我尝试过,但仍然没有得到结果 这是我第一次使用存储过程和节点js,所以我有了表名test\u data 测试数据 CREATE TABLE `test_data` ( `id` INT(11) NOT NULL AUTO_INCREMENT, `name` VARCHAR(255) NULL DEFAULT NULL, `address` VARCHAR(255) NULL DE
test\u data
测试数据
CREATE TABLE `test_data` (
`id` INT(11) NOT NULL AUTO_INCREMENT,
`name` VARCHAR(255) NULL DEFAULT NULL,
`address` VARCHAR(255) NULL DEFAULT NULL,
`city` VARCHAR(255) NULL DEFAULT NULL,
PRIMARY KEY (`id`)
)
COLLATE='latin1_swedish_ci'
ENGINE=InnoDB
AUTO_INCREMENT=2
;
这是存储过程插入数据:
insert_data
CREATE DEFINER=`root`@`localhost` PROCEDURE `insert_data`(
IN `_data` JSON
)
LANGUAGE SQL
NOT DETERMINISTIC
CONTAINS SQL
SQL SECURITY DEFINER
COMMENT ''
BEGIN
declare p_name varchar(255) default null;
declare p_address varchar(255) default null;
declare p_city varchar(255) default null;
set p_name= json_unquote(json_extract(_data, '$.name'));
set p_address= json_unquote(json_extract(_data, '$.address'));
set p_city= json_unquote(json_extract(_data, '$.city'));
insert into test_data(name, address, city) values(p_name, p_address, p_city);
END
这是我的节点js
代码:
const con = require('./db/connection');
const _data = {
"name": "Ironman",
"address": "ani@gamil.com",
"city": "bhilai"
}
const sql = "CALL insert_data('"+_data +"')"
con.query(sql, _data,(error, result) => {
if(error){
return console.log("There is error in the query: " + error)
}
console.log(result)
})
错误
There is error in the query: Error: ER_INVALID_JSON_TEXT: Invalid JSON text: "Invalid value." at position 1 in value for column '._data'.
请帮帮我,我做错了什么
谢谢在我看来,您实际上并没有传递JSON值
const _data = {
"name": "Ironman",
"address": "ani@gamil.com",
"city": "bhilai"
};
上面是一个Javascript对象,而不是它的JSON表示。所以这里
const sql = "CALL insert_data('"+_data +"')"
sql
的实际值将是“CALL insert_data('[object]')”
,这实际上是无效的。尝试将sql
转储到控制台,以验证情况确实如此
尝试:
const sql = "CALL insert_data('"+ JSON.stringify(_data) +"')"
在我看来,您实际上并没有传递JSON值
const _data = {
"name": "Ironman",
"address": "ani@gamil.com",
"city": "bhilai"
};
上面是一个Javascript对象,而不是它的JSON表示。所以这里
const sql = "CALL insert_data('"+_data +"')"
sql
的实际值将是“CALL insert_data('[object]')”
,这实际上是无效的。尝试将sql
转储到控制台,以验证情况确实如此
尝试:
const sql = "CALL insert_data('"+ JSON.stringify(_data) +"')"