【发布时间】:2014-11-07 16:33:12
【问题描述】:
我的程序创建一个像这样的表:
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();
});
};
那一点是有效的,我只是把它放在那里让你看到结构。
过了一会儿,下面的函数会尝试在数据库中插入值:
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 列
我以前在运行复杂查询时看到过这个,但是这个看起来很简单......我一定错过了一些非常简单的东西。我检查了这些值,它们看起来都不错。
编辑: 按照 cmets 中的建议,我尝试添加列名,但没有任何改变。我会把它们排除在外,以免阻塞代码。
【问题讨论】:
-
我不确定它应该是
'null'(字符串)而不是values.push(['null', ...])行中的null(值)。不过,这应该不会导致问题。 -
好的,最后一件事 - 你能举例说明
p中的内容吗?更具体地说,您推送的任何属性是原语 - string 或 number,而不是对象?.sizes属性让我有些困惑,看 - 它看起来像是一个数组。 -
我的意思是,你能展示一个取自
values数组的样本吗? -
伙计,你是个摇滚明星,我忘了把它串起来。这值得一票,让它成为一个答案!这也说明了为什么正确命名变量总是可以节省时间。谢谢!