PDOに慣れていないため、ここでいくつかの支援が必要です
複数のインサートがあります
$sql = "INSERT INTO ".$this->form_sql_table." (" . implode(",",$sql_arr_insert) . ") VALUES ".$sql_insert_placeholders.";";
これにより、 INSERT INTO table (col1,col2) 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();
arr_values と arr_format の prin_r と同様に、SQL をエコーアウトします。どれも似合いそうです。
私は本当に盲目なのですか、それともこれらをバインドする際に誤解しているものですか?
誰かがここで私を助けてくれることを願っています..ありがとう
解決した
「?」が出現するたびに索引を付ける必要がありました。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();
}