2014-07-05 2 views
-1

길고 짧은 설명. 데이터베이스 쿼리를 처리하는 클래스가 있고 전달 된 문 유형에 따라 어느 시점에서 분기됩니다. 그것이 SELECT 인 경우에, 그것은 무언가를한다. 그것이 (성공한) INSERT, UPDATE 또는 DELETE 인 경우 다른 작업을 수행합니다. 나는 그것을 확인하기 위해 PDOStatement::rowCount에 의존하고 있었고 그것은 나의 이전 시스템에서 잘 작동했다. 그러나 클래스를 다른 서버로 이식 한 후 PDOStatement::rowCount 동작이 변경되었습니다 (이제는 SELECT 문에 의해 반환 된 행의 양이 반환됩니다). 나는 PHP 매뉴얼에서 그러한 행위가 일 수 있고 일 수 있으며, 일관성이없고 데이터베이스에 달려 있다고 읽었습니다.PDO에서 명령문 유형 결정

내 질문에. 어떤 유형의 진술이 PDO에 전달되었는지 확인하는 확실한 방법이 있습니까? 아마도 구문의 구문을 분석하여 클래스에 추가하는 방법을 쓸 수 있지만 다른 방법 (기본 제공 방법)이있을 수 있습니다.이 경우 휠을 다시 작성하지 않아야합니다. 감사.

+0

모습? – hjpotter92

+0

예, 분명한 답변입니다. 하지만 옆에 스크루 드라이버가 있으면 펜치를 사용하여 나사를 삽입하지 않을 것인지를 묻는 것입니다. – Avi

답변

0

먼저 PDO::ATTR_ERRMODE 속성을 설정하십시오. 그런 다음

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

... 성명을 준비하기위한 전달 된 쿼리의 키워드에 대한

try { 

    $stmt = $pdo->prepare($sql); 
    $stmt->execute($values); 

    try { 

     $rows = $stmt->fetchAll(); 

     /* The SQL was SELECT */ 

     $count = count($rows); 


    } catch (PDOException $e) { 

     /* The SQL was INSERT, UPDATE or DELETE */ 

     $count = $stmt->rowCount(); 

    } 

} catch (PDOException $e) { 

    /* Execution Failure */ 

    $error = $e->getMessage(); 

}