1

PDO を使用して次のクエリを生成しています。

  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.
4

1 に答える 1

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... */
于 2012-11-15T00:35:01.303 に答える