我正在使用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.
答案 0 :(得分: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... */