mysql varchaer排序,mysql – 错误:ER_OPERAND_COLUMNS:操作数应包含1列

我的程序创建了一个这样的表:

exports.createTablesPhase2= function(tableprefix,cb){

var s3 = 'CREATE TABLE IF NOT EXISTS productData (

`id` int NOT NULL AUTO_INCREMENT,

`url` varchar(255) NOT NULL,

`baseSite` varchar(255) DEFAULT NULL,

`img_url` varchar(255) DEFAULT NULL,

`name` varchar(255) DEFAULT NULL,

`price` varchar(15) NOT NULL,

`sale_price` varchar(15) DEFAULT NULL,

`description` text DEFAULT NULL,

`extra` varchar(255) DEFAULT NULL,

`brand` varchar(255) DEFAULT NULL,

`colors` varchar(255) DEFAULT NULL,

`sizes` varchar(255) DEFAULT NULL,

`date` date NOT NULL ,

PRIMARY KEY `id` (`id`),UNIQUE `url` (`url`));';

client.query(s3, function(err, result) {

if (err) throw err;

cb();

});

};

这一点有效,我只是把它放在那里,所以你看到了结构.

然后一段时间后,以下函数尝试在db中插入值:

exports.insertProducts = function(products,tableprefix,cb){

var values = [];

var date=(new Date()).toISOString().substring(0, 19).replace(/T.*/gi, '');

for (var i = 0; i < products.length; i++) {

var p = products[i];

values.push(['null',p.url,p.baseSite,p.imgUrl,p.name,p.price,p.saleprice,p.description,p.moreInfo,p.brand,p.color,p.sizes,date]);

}

console.log(values);

var sql = "INSERT INTO `productData` VALUES ?

ON DUPLICATE KEY UPDATE `price` = VALUES (`price`),`sale_price` = VALUES (`sale_price`), `date` = VALUES (`date`)";

client.query(sql,[values],function(err){

if (err) throw err;

cb();

});

};

我收到以下错误:错误:ER_OPERAND_COLUMNS:操作数应包含1列

我之前在运行复杂查询时已经看过这个,但是这个看起来很简单……我必须错过一些非常简单的东西.我检查过这些值,看起来都很好.

编辑:

根据评论中的建议,我尝试添加列名,但它不会改变任何内容.我会把它们留给不要堵塞代码.

解决方法:

如果使用INSERT表VALUES进行批量插入? node-mysql中的语法,确保发送到.query()的数组数组具有相应类型的所有值 – 通常作为基元(字符串或数字).

在你的情况下,其中一个元素是一个数组 – 并且由node-mysql查询构建器包含在parens中,将VALUES行弄乱为类似…

VALUES(null, '123', (123, 456)...)

这将使MySQL抛出令人讨厌的操作数应该包含1列错误.

标签:sql,mysql,node-js

来源: https://codeday.me/bug/20190728/1561278.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值