PDO多次插入失败

时间:2013-07-30 19:12:23

标签: php mysql pdo bind

在这里需要一些帮助,对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();
     }

0 个答案:

没有答案