使用PHP PDO插入多行

时间:2012-07-26 15:56:37

标签: php pdo prepared-statement

我正在尝试通过PHP PDO使用transaction-bind插入多行。以下是我的代码。

$arrkeys = array_keys($this->postItem);
$itemqry = "INSERT INTO test_item (itemdate, flditmname, fieldtype, subscribe, id, year) VALUES (:itemdate, :flditmname, :fieldtype, :subscribe, :id, :year);" // dynamically generated

$itmstmt = $dbcon->prepare($itemqry);

for ($i=0; $i<$cnt; $i++){
  foreach ($arrkeys as $key){
     $val = $this->postItem[substr($key,1)][$i];
     $itmstmt->bindParam($key, $val);
  }

  try {
    $itmstmt->execute();
  } catch (PDOException $e){
    echo $e->getMessage();
  }

}

我验证了值正确填充(对于绑定),如下所示:

echo $key."=".$val."<br>";  //echoed just before the bind.

:itemdate=2012-07-02 15:09:04
:flditmname=dccd
:fieldtype=2
:subscribe=X
:id=12345
:year=2012
:itemdate=2012-07-12 15:09:19
:flditmname=lkpok
:fieldtype=3
:subscribe=X
:id=12345
:year=2012

但是,在我的db表中插入后,所有行的所有字段都取值'2012'(最后一个字段的值)。

我不知道为什么会发生这种情况。谁能帮我跟踪这个问题?非常感谢你的时间。

1 个答案:

答案 0 :(得分:3)

您使用的方法错误:

$itmstmt->bindParam($key, $val); 

应该是:

$itmstmt->bindValue($key, $val); 

bindValue将值绑定到参数,而 bindParam将参数绑定到指定的变量名称