2012-07-26 3 views
0

PHP PDO를 통해 transaction-bind를 사용하여 여러 행을 삽입하려고합니다. 아래는 제 코드입니다.PHP PDO로 여러 행 삽입

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'복용 :

$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(); 
    } 

} 

나는 값이 다음과 같이 (바인딩에 대해) 제대로 채우지 확인 (마지막 필드의 값).

왜 이런 일이 발생하는지 전혀 알 수 없습니다. 아무도 내가 문제를 추적하도록 도울 수 있습니까? 시간 내 주셔서 대단히 감사합니다.

+1

에 매개 변수를 결합하는 반면, 'bindParam'은 변수에 대한 참조를 인자로 취합니다.'bindValue'는 변수의 값을 인수로 취합니다. 당신이했던 것처럼, 동일한 변수'$ val'에 여러 참조를주었습니다. 물론 이것은 모두 같은 값으로 평가됩니다. – DCoder

답변

3

당신은 잘못된 방법을 사용하고 있습니다 :

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

은 다음과 같아야합니다

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

bindValue이 매개 변수에 값을 결합, bindParam 지정된 변수 이름

+0

때로는 우리 삶에서 가장 큰 차이를 만드는 단순한 것들을 놓치기도합니다. 귀하의 초고속 대응에 감사드립니다. 너는 내 하루를 구했다. – Ravi