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 回答