2012-05-14 2 views
2

다음 코드에 대한 PHP 5.4와 5.2.13 간에는 약간의 차이가 있습니까? 그것은 PHP 5.4 (& mysql 5.1.62)와 함께 작동하지만 오류는 표시되지 않고 쿼리가 실행됩니다. 그러나 5.2.13 (& MySQL은 5.1.3.0)은 오류를 표시하지 않습니다 (이 catch 블록에 해당되지 않습니다)하지만 데이터가 데이터베이스에 삽입되지 않습니다와PHP PDO 및 트랜잭션 - PHP 5.4 및 PHP 5.2.13에서의 다른 동작

$db = new PDO(DHOST, DUSER, DPASS, array(PDO::ATTR_PERSISTENT => true, PDO::ATTR_EMULATE_PREPARES => true)); 
     $db->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_WARNING); 

try { 
     $db->beginTransaction(); 
     $db->exec($insertString); 
     $db->commit(); 
    } catch (Exception $e) { 
     try { 
      $db->rollBack(); 
      throwDbError($handler->errorInfo()); 
     } catch (Exception $e2) { 
      ... 
     } 
    } 

내가 ommit 경우 beginTransactioncommit 인 줄은 PHP 5.2에서도 작동하지만 트랜잭션이 필요합니다. mysql 데이터베이스의 두 테이블 모두 InnoDB를 사용하고 있습니다.

+2

'DB_DAO :: $ db-> setAttribute (PDO :: ATTR_ERRMODE, PDO :: ERRMODE_WARNING);'행은 의심스러워 보입니다. 아마도 5.4 예외 오류 모드를 사용하고 있습니까? –

+0

죄송합니다. 이전 코드 단편 – ladar

답변

1

오류 모드는 예외를 throw하도록 설정되지 않습니다. 변경 :

$db->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_WARNING); 

사람 :

$db->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION); 

는 두 PHP 버전 사이에 뚜렷한 차이가 없어야합니다.

+0

감사합니다. 그 후 "PDO 예외 : 다른 버퍼되지 않은 쿼리가 활성화되어있는 동안 쿼리를 실행할 수 없습니다"가 나타납니다. 어떤 차이가 있는지 모르지만 최소한 문제를 발견하고 해결 방법을 만들었습니다. – ladar

+0

링크 된 mysqlclient 라이브러리의 차이가있을 수 있습니다. 확실하지는 않지만 해결 방법을 찾은 것을 기쁘게 생각합니다 :) –

0

Exception이 아니라 PDOException을 잡아야합니다.

+1

모든 예외 클래스는 Exception –

+0

@ Narf에서 ​​파생됩니다. 틀림없이 더 좋을 수도 있지만 발견 된 문제를 해결하지는 못합니다. –