2014-08-27 5 views
1

PDO를 사용하도록 내 사이트를 업그레이드 중입니다. 대부분의 코드는 정상적으로 작동하지만 INSERT 문은 하나만 있어도 작동하지 않습니다. 내 로컬 서버에서 작동하지만 라이브 사이트에서는 작동하지 않습니다. 나는 테이블 구조를 확인했고 그것들은 동일합니다. PHP PDO INSERT가 준비된 문으로 작동하지 않습니다.

내가 내 unique_product_line_ids 배열의 값을 검사 한

try { 

    foreach ($unique_product_line_ids AS $key => $value) { 

     $query_insertSQL = " 
      INSERT INTO tblCarts (
      date_created 
      , session_id 
      , product_line_id 
      , posted_by_id 
      , quantity 
      ) VALUES (
       :date_created 
      , :session_id 
      , :product_line_id 
      , :posted_by_id 
      , :quantity1 
      ) 
      ON DUPLICATE KEY UPDATE quantity = :quantity2 
        "; 
     $insertSQL = $conn->prepare($query_insertSQL); 

     $insertSQL->execute(array(
      ':date_created'=>$date_created 
      , ':session_id'=>$session_id 
      , ':product_line_id'=>$key 
      , ':posted_by_id'=>$_SESSION['member']['individual_id'] 
      , ':quantity1'=>$value 
      , ':quantity2'=>$value 
     )); 

     $rc_insertSQL = $insertSQL->rowCount(); 

     // close connection 
     $insertSQL->closeCursor(); 

    } 

} catch(PDOException $e) { 
     echo 'ERROR: ' . $e->getMessage(); 
} 

내 코드 그리고 그들은 확인 존재한다. 나는 또한 그것의 해당 매개 변수와 함께 중복 중복 키 업데이트 라인을 제거하려고했지만 아무런 차이가 없습니다.

나는 잠재적 인 원인을 제거하고 성공없이 문제를 격리하려고 몇 시간을 보냈습니다. 모든 도움이나 포인터는 매우 감사하게 받아 들여질 것입니다.

감사

준비된 명령문의 전문가의
+0

오류를 사용할 수있는 경우에 에러가 발생했을 경우

은 디버깅하려면? 라이브 사이트에 PDO가 설치되어 있습니까? – Sal00m

+1

그냥'echo $ insertSQL-> errorInfo()' – Sal00m

답변

3

하나 당신이 그렇게 내가 이런 코드 리메이크 것, 한 번 준비하고 여러 번 실행하는 것입니다 :

try { 

    $totalInserts = 0; 

    $query_insertSQL = 
    " 
     INSERT INTO tblCarts (
       date_created 
      , session_id 
      , product_line_id 
      , posted_by_id 
      , quantity 
     ) 
     VALUES (
       :date_created 
      , :session_id 
      , :product_line_id 
      , :posted_by_id 
      , :quantity 
     ) 
     ON DUPLICATE KEY UPDATE 
      quantity = :quantity 
    "; 

    $insertSQL = $conn->prepare($query_insertSQL); 


    foreach ($unique_product_line_ids AS $key => $value) 
    { 
     $insertSQL->execute(array(
       ':date_created' => $date_created 
      , ':session_id'  => $session_id 
      , ':product_line_id'=> $key 
      , ':posted_by_id' => $_SESSION['member']['individual_id'] 
      , ':quantity'  => $value 
     )); 

     $totalInserts += $insertSQL->rowCount(); 

     /** 
     * to debug if any error 
     */ 
     var_export($conn->errorInfo()); 

     // close connection - does not need anymore while you don't 
     // prepare it multiple times 
     //$insertSQL->closeCursor(); 

    } 

} 
catch(PDOException $e) 
{ 
    echo 'ERROR: ' . $e->getMessage(); 
} 


주 :

한 변수를 원하는만큼 사용할 수 있습니다. 를 사용할 필요가 없습니다.및 :quantity2이 다를 때까지 :quantity이면 충분합니다. 당신이 $conn->errorInfo(); (연결 수준) 또는 $insertSQL->errorInfo(); (쿼리 수준)

+0

조지, 당신의 신속한 반응에 대해 많은 감사를드립니다. 한 번 준비 할 때 팁을 적용하고 여러 번 실행하고 코드의 다른 인스턴스에 적용합니다. 그것은 내 문제를 해결하지 않았지만 errorInfo 메서드를 사용하여 나를 위해 문제를 강조 표시 - 데이터베이스 연결 거부. 도움을 주셔서 감사합니다. John – user1812108

+1

나는 오류를 보지 않고 정확한 문제를 발견하기가 너무 어렵다. 건배 행운을 빕니다 –

관련 문제