2012-11-15 23 views
1

我使用PDO生成以下查詢:爲什麼我的查詢在基數違規錯誤PDO/PHP的MySQL導致

INSERT INTO MyTable (ID, Data) 
    VALUES ( 
    (:id_0, :data_0), (:id_1, :data_1), (:id_2, :data_2), 
    (:id_3, :data_3), (:id_4, :data_4), (:id_5, :data_5), 
    (:id_6, :data_6), (:id_7, :data_7), (:id_8, :data_8), 
    (:id_9, :data_9) 
) 
一個循環內產生此查詢

,所以我剛剛得到了print_r($query);部分和粘貼在這裏。

然後在我的PHP我有一個循環,結合這樣的參數:

$c = 0; 
    foreach($data as $key=> $value) 
    { 
     $insert->bindValue(":id_{$c}", $key, DB::PARAM_INT); 
     $insert->bindValue(":data_{$c}", $value, DB::PARAM_STR); 
     $c++; 
    } 

我得到以下錯誤:

SQLSTATE[21000]: Cardinality violation: 1241 Operand should contain 1 column(s) 

我的表定義是這樣的:

CREATE TABLE MyTable(
     ID INT PRIMARY KEY, 
     Data TEXT 
    ) ENGINE=MyISAM 

任何人都可以幫助我嗎?

$data - this just holds key - value pairs where key is integer and value 
is serialized array. 
+0

'$ data'是什麼? –

+0

只是持有$ key => $ value對,其中$ key是整數,$ value是序列化數組 – Giorgi

回答

3

VALUES條款中刪除外部()。多行VALUES子句不是(),但每個逗號分隔的行組是(),如VALUES (1,2,3),(3,2,1),(1,2,3)所示。通過封閉整行列表,MySQL必須將外部()誤解爲表達式的開始,其結果將成爲第一列。

VALUES /* no (here... */ 
    (:id_0, :data_0), (:id_1, :data_1), (:id_2, :data_2), 
    (:id_3, :data_3), (:id_4, :data_4), (:id_5, :data_5), 
    (:id_6, :data_6), (:id_7, :data_7), (:id_8, :data_8), 
    (:id_9, :data_9) 
/* no) here... */ 
+0

良好的捕獲。這是爲什麼我更喜歡'INSERT INTO mytable SET:id_0 =:data_0,:id_1 =:data_1等' –

+0

非常感謝你 – Giorgi

相關問題