2012-07-26 124 views
0

我想通過PHP PDO使用事務綁定插入多行。以下是我的代碼。用PHP PDO插入多行

$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 

然而,在我的數據庫表中插入後,所有行的所有字段,取值爲「2012」 (最後一個字段的值)。

我不明白爲什麼會發生這種情況。任何人都可以幫我追蹤這個問題嗎?非常感謝您的寶貴時間。

+1

'bindParam'把一個變量*的引用作爲參數,'bindValue'將*變量*的值作爲它的參數。你這樣做的方式,你給它多次引用同一個變量'$ val',這當然都會評估爲相同的值。 – DCoder 2012-07-26 16:03:20

回答

3

您使用了錯誤的方法:

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

應該是:

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

bindValue綁定值參數,而 bindParam綁定一個參數到指定的變量名

+0

有時我們會想念那些在我們生活中發揮最大作用的簡單事物。謝謝你們的超快反應。你拯救了我的一天。 – Ravi 2012-07-26 16:45:07