0

PHPPDOを介した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」(最後のフィールドの値)を取ります。

なぜこれが起こっているのか分かりません。誰かが私が問題を追跡するのを手伝ってもらえますか?お時間をいただき、誠にありがとうございます。

4

1 に答える 1

3

間違った方法を使用しています:

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

する必要があります:

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

bindValue値をパラメーターに bindParamバインドし、パラメーターを指定された変数名にバインドします

于 2012-07-26T16:32:21.360 に答える