2014-09-13 224 views
2

我的程序創建一個表像這樣:錯誤:ER_OPERAND_COLUMNS:操作數應包含1列(S)

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列(S)

我以前在運行復雜查詢時看到過這個,但這個看起來很直截了當......我必須錯過一些非常簡單的事情。我檢查了值,他們都看起來不錯。

編輯: 以下評論中的建議,我已嘗試添加列名稱,但它不會改變任何東西。我會讓他們不要阻塞代碼。

+0

我不確定它應該在'values.push(['null',...])行中是'null'(一個字符串)而不是'null'(一個值)。雖然這不應該引起這個問題。 – raina77ow 2014-09-13 18:51:55

+1

好的,最後一件事 - 你能展示一個'p'中的內容嗎?更具體地說,是你推入一個基元的任何屬性 - _string_或_number_,而不是一個對象?我被'.sizes'屬性弄糊塗了,看 - 看起來它是一個數組。 – raina77ow 2014-09-13 18:58:19

+0

我的意思是,你能展示一個從'values'數組中取得的樣本嗎? – raina77ow 2014-09-13 19:00:26

回答

4

如果在node-mysql中使用INSERT table VALUES ?語法執行批量插入,請確保發送到.query()的數組陣列具有相應類型的所有值 - 通常是基元(字符串或數字)。

在你的情況下,這些要素之一是一個陣列 - 這是由node-mysql查詢生成器裹成小括號,搞亂VALUES行成類似...

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

這會讓MySQL的投那討厭的Operand should contain 1 column(s)錯誤。

+0

感謝您的額外知識;) – xShirase 2014-09-13 19:13:56

相關問題