在这里需要一些帮助,对PDO有些不熟悉
我有一个多次插入
$sql = "INSERT INTO ".$this->form_sql_table." (" . implode(",",$sql_arr_insert) . ") VALUES ".$sql_insert_placeholders.";";
这产生INSERT INTO表(col1,col2)VALUES(?,?),(?,?),(?,?)
values数组是
$arr_values = array(
[0] => array(
[0] => 'value 1',
[1] => 'value 2'
),
[1] => array(
[0] => 'value 1',
[1] => 'value 2'
),
[2] => array(
[0] => 'value 1',
[1] => 'value 2'
)
);
格式化数组:
$arr_format = array(
[0] => '?',
[1] => '?'
);
尝试绑定这些但继续获取“绑定变量的数量与令牌数量不匹配”消息
foreach($arr_values as $pkey => $parr){
$values = array_values($parr);
foreach ( $arr_format as $key => $bind ) {
switch ($bind) {
case '%d':
$stmt->bindValue($key + 1, $values[$key], PDO::PARAM_INT);
break;
case '%s':
default:
$stmt->bindValue($key + 1, $values[$key], PDO::PARAM_STR);
// echo ($key + 1)." - ".$values[$key]."<br>";
// prints out:
// 1 - Value 1
// 2 - Value 2
}
}
}
$stmt->execute();
我回复了sql,看起来很好,以及arr_values和arr_format上的prin_r。这一切似乎都匹配。
我是真的失明了,还是我对绑定它们有什么误解?
希望有人可以帮助我...谢谢
需要为“?”的每个出现事件编制索引从1开始到'?'的总数
更新的代码:
if($multiarr){
$count = 1;
foreach($arr_values as $pkey => $parr){
$values = array_values($parr);
foreach ( $arr_format as $key => $val ) {
switch ($values[$key]) {
case '%d':
$stmt->bindValue($count, $values[$key], PDO::PARAM_INT);
break;
case '%s':
default:
$stmt->bindValue($count, $values[$key], PDO::PARAM_STR);
}
$count++;
}
}
$stmt->execute();
}