2014-12-25 2 views
3

사용자 정의 테이블에 데이터를 삽입하려고 시도 할 때 mysql에서 발생하는 오류를 어떻게 표시합니까?실패한 Modx/xPDO 쿼리 개체에서 MySQL 오류를 표시하는 방법은 무엇입니까?

예를 들어 SQL 오류로 인해 실패 할 코드 비트가 아래에 있습니다.

$insert = "some insert sql statement that will fail"; 

$myquery = $modx->query($insert); 

    if(!$myquery){ 

     echo 'error occurred! <br>'; 

    } 

실제로 오류가 무엇인지 [예 : 열 불일치, 고유 ID가 존재 함 등]? 이러한 맥락에서 xPDO Getting Started guide, $modx의 실시 예에 기초

+0

잘 모르겠어요에서, modx 워드 프로세서, 그들은 일반적으로 xpdo 기능을 문서로 : $ xpdo-> 쿼리() 대신 $ modx-의> 쿼리() .. HTTP : //rtfm.modx.com/xpdo/2.x/getting-started/creating-a-model-with-xpdo/defining-a-schema/defining-relationships –

+0

'modx.class.php'에서 :'class modX는 xPDO를 확장합니다. {...}' – proxyfabio

답변

2

PDO 연장되는 클래스가 $myquery 가능성 PDOStatement 목적 결과 자원 오브젝트 것으로 보인다.

일반적인 PDO 개체와 마찬가지로 예외 오류 모드를 $modx에 설정할 수 있습니다.

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

오류 발생시 오류가 발생합니다. 기본적으로 PDO는 자동으로 오류가 발생합니다. 오류 모드 are documented here.

수정 :Looking into the xPDO sourcePDO을 확장하는 것이 아니라 속성으로 PDO 개체를 포함하고 연결 속성을 통해 전달, PDO 방법을 구현하지 않습니다. 따라서 setAttribute() 호출은 기본 PDO 개체로 전달되므로 이에 따라 작업해야합니다.

The xPDO constructor 약간 통상 PDO 생성자의 기능을 확장하고, 오류 모드를 설정하는 대신 setAttribute() 통해 나중에 설정 될 수 5 파라미터 옵션들의 어레이 수용 :

$xpdo = new xPDO($dsn, $user, $password, [], [PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION]); 

어떤 방법을 또한 더 간단에 errormode를 설정할 수 있습니다

try { 
     $insert = "some insert sql statement that will fail"; 
     $myquery = $modx->query($insert); 
    } 
    catch (PDOException $e) { 
     echo 'error occurred! ' . $e->getMessage() . '<br>'; 
    } 

: 당신은 에러 유형 PDOException의 예외를 포착하기 위해 try/catch 블록에 코드를 포장 할 수있다, 그것을 설정 선택과 PHP는 대신 단지 예외와 달리 E_WARNING 메시지를 내보내고 치명적이지 않습니다.

xPDO로 빠른 테스트를 설정하여 예상 한대로이 모든 작업을 확인할 수있었습니다.

+0

완벽합니다! 감사. –

2

사용자 정의 xpdo 요청을 추적하는 더 쉬운 방법이 있습니다. 우리가 오류를 잡을 수있는 실행 후

$c = $modx->newQuery('modResource'); 
$c->where(array(
    'id1' => 1 
)); 

// print request for control 
print_r($c->toSQL()); 

$s = $c->prepare(); 
$s->execute(); 

print_r($s->errorInfo()); 

:

Array ([0] => 42S22 [1] => 1054 [2] => Unknown column 'modResource.id1' in 'where clause') 

그것은 그것으로 xpdo 사용 PDO 및 컨트롤 실행이 도움의 모든 때문입니다. xpdo 소스에서 일부 코드 :

/** 
* @see http://php.net/manual/en/function.pdo-errorinfo.php 
*/ 
public function errorInfo() { 
    if (!$this->connect()) { 
     return false; 
    } 
    return $this->pdo->errorInfo(); 
} 
+0

동의 -이 일은 MODX 방식입니다. – okyanet

관련 문제