1

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();
     }
4

0 に答える 0