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 上回显了 sql,看起来还不错,还有 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();
     }
4

0 回答 0