Javascript Node/MySQL:Insert只在第一次工作
我对node(目前是v6)和mysql有问题Javascript Node/MySQL:Insert只在第一次工作,javascript,mysql,sql,node.js,insert,Javascript,Mysql,Sql,Node.js,Insert,我对node(目前是v6)和mysql有问题 节点代码正在服务器端运行,未收到任何错误。代码第一次起作用;但是,随后的时间,名称和说明值作为空字符串输入,数量列作为0(默认值) 已正确插入创建的、pid和id(自动递增)列的值。我不知道为什么第一次这样做效果很好,之后就不起作用了 编辑:当我从addMany获取输出的查询并将其直接输入mysql时,它每次都工作 我如何让它每次都正常工作?衷心感谢您的帮助 表架构: CREATE TABLE `some_table` ( `id` int(11
节点代码
正在服务器端运行,未收到任何错误。代码第一次起作用;但是,随后的时间,名称
和说明
值作为空字符串输入,数量
列作为0
(默认值)
已正确插入创建的、pid
和id
(自动递增)列的值。我不知道为什么第一次这样做效果很好,之后就不起作用了
编辑:当我从addMany
获取输出的查询并将其直接输入mysql时,它每次都工作
我如何让它每次都正常工作?衷心感谢您的帮助
表架构:
CREATE TABLE `some_table` (
`id` int(11) unsigned NOT NULL AUTO_INCREMENT,
`pid` int(11) unsigned NOT NULL,
`qty` int(11) unsigned NOT NULL DEFAULT '0',
`name` varchar(128) NOT NULL,
`description` text NOT NULL,
`created` int(10) NOT NULL DEFAULT '0',
PRIMARY KEY (`id`),
KEY `k_pid` (`pid`),
CONSTRAINT `fk_some_table_p_pid` FOREIGN KEY (`pid`) REFERENCES `p` (`id`) ON DELETE CASCADE
) ENGINE=InnoDB AUTO_INCREMENT=1337 DEFAULT CHARSET=utf8;
节点代码:
function addMany(items, callback) {
const itemsArray = Array.isArray(items) ? items : [items];
const params = itemsArray.map((item) => {
return [
item.pid,
item.quantity,
item.name,
item.description,
Math.floor(new Date() / 1000),
];
});
const queryStr = 'INSERT INTO some_table (`pid`, `quantity`, `name`, `description`, `created`) VALUES ?;';
db.executeQuery(queryStr, [params], callback);
}
首次运行:
const items1 = [
{ name: 'name__1', description: 'some desc 1', quantity: 1, pid: '17771' },
{ name: 'name__2', description: 'some desc 2', quantity: 1, pid: '17771' }
];
addMany(items1, () => {});
addMany
创建并运行此查询:
INSERT INTO some_table
(`pid`, `quantity`, `name`, `description`, `created`)
VALUES
('17771', 1, 'name__1', 'some desc 1', 1502913412),
('17771', 1, 'name__2', 'some desc 2', 1502913412);
INSERT INTO some_table
(`pid`, `quantity`, `name`, `description`, `created`)
VALUES
('17771', 1, 'name__3', 'some desc 3', 1502913412),
('17771', 1, 'name__4', 'some desc 4', 1502913412);
MYSQL显示以下数据:
id pid quantity name description created
6423 17771 1 name__1 some desc 1 1502913412
6424 17771 1 name__2 some desc 2 1502913412
id pid quantity name description created
6423 17771 1 name__1 some desc 1 1502913412
6424 17771 1 name__2 some desc 2 1502913412
6425 17771 0 1502913412
6426 17771 0 1502913412
第二轮:
const items2 = [
{ name: 'name__3', description: 'some desc 3', quantity: 1, pid: '17771' },
{ name: 'name__4', description: 'some desc 4', quantity: 1, pid: '17771' }
];
addMany(items2, () => {});
addMany
创建并运行此查询:
INSERT INTO some_table
(`pid`, `quantity`, `name`, `description`, `created`)
VALUES
('17771', 1, 'name__1', 'some desc 1', 1502913412),
('17771', 1, 'name__2', 'some desc 2', 1502913412);
INSERT INTO some_table
(`pid`, `quantity`, `name`, `description`, `created`)
VALUES
('17771', 1, 'name__3', 'some desc 3', 1502913412),
('17771', 1, 'name__4', 'some desc 4', 1502913412);
MYSQL显示以下数据:
id pid quantity name description created
6423 17771 1 name__1 some desc 1 1502913412
6424 17771 1 name__2 some desc 2 1502913412
id pid quantity name description created
6423 17771 1 name__1 some desc 1 1502913412
6424 17771 1 name__2 some desc 2 1502913412
6425 17771 0 1502913412
6426 17771 0 1502913412
为addMany
显示的查询看起来正常,但是您是如何获得此问题的查询字符串的?因为看起来显示的查询字符串不是正在运行的字符串。我正在使用npm模块mysql
,它将参数数组转换为适当的mysql语法。这就是您所指的吗?是的,但是要验证查询:您是从日志中获取查询的,还是您自己(在第二次运行时)键入此处所述的查询?因为这个查询看起来不错,我想如果你在MySQL中手动测试的话,那就行了。啊,我明白了。我修改了回调函数以输出完成的查询。我在这里复制了它:。编辑:db
只是运行mysql.connect()
的函数的包装,并在回调中返回mysql.query
,然后断开连接。奇怪。。。您可以创建一个代码段进行测试吗?您为addMany
显示的查询看起来正常,但是您是如何获得此问题的查询字符串的?因为看起来显示的查询字符串不是正在运行的字符串。我正在使用npm模块mysql
,它将参数数组转换为适当的mysql语法。这就是您所指的吗?是的,但是要验证查询:您是从日志中获取查询的,还是您自己(在第二次运行时)键入此处所述的查询?因为这个查询看起来不错,我想如果你在MySQL中手动测试的话,那就行了。啊,我明白了。我修改了回调函数以输出完成的查询。我在这里复制了它:。编辑:db
只是运行mysql.connect()
的函数的包装,并在回调中返回mysql.query
,然后断开连接。奇怪。。。你能为测试创建一个代码段吗?