2014-12-11 2 views
1

phpunit을 사용하여 연결을 테스트하려고하는데 이미 error_reporting(0)으로 지정하고 PDO::ATTR_ERRMODE => PDO::ERRMODE_SILENT을 할당합니다. 그러나 잘못된 정보를 제공하면 항상 오류 메시지가 표시됩니다. 잘못된 계정, 그것은 그것을 해제하는 방법 PDO 오류 메시지를 끄는 방법

PDOException: SQLSTATE[HY000] [1045] Access denied for user 'test'@'localhost' (us ing password: YES)

을 보여줍니다? 연결이 실패 할 경우

$options = array(
    PDO::ATTR_ERRMODE => PDO::ERRMODE_EXCEPTION, 
    PDO::ATTR_PERSISTENT => false, 
); 
$dsn = 'mysql:host=' . $config['host'] . ';dbname=' . $config['database'] . ';charset=utf8'; 

try { 
    $this->dbh = new PDO($dsn, $config['username'], $config['password'], $options); 
} catch (PDOExeception $e) { 
    // Do something 
} 

답변

0

PDO::__construct 항상 PDOException 발생합니다. 그것에 대해 할 수있는 일은 없습니다. 연결에 실패하거나 모든 연결에 대해 예외를 해제해야하는 이유를 설명 할 충분한 이유가있는 경우 모든 정상적인 응용 프로그램에서 예외를 throw해야합니다.

연결 옆 다른 트랜잭션에서도 작동합니다.

예 : 새로운 PDO`, 나는 그것을 켜집니다`실행할 때

<?php 
$options = array(
    PDO::ATTR_ERRMODE => PDO::ERRMODE_SILENT, 
    PDO::ATTR_PERSISTENT => false, 
); 
$dsn = 'mysql:host=' . $config['host'] . ';dbname=' . $config['database'] . ';charset=utf8'; 
try { 
    //THIS WILL THROW EXECPTION IF FAILED, NO MATTER WHAT ERROR MODE YOU SET 
    $this->dbh = new PDO($dsn, $config['username'], $config['password'], $options); 
} catch (PDOException $e) { 
    // Do something 
} 

//JUST SILENT THIS WILL NOT CAUSE EXCEPTION 
$dbh->query("SELECT badColumn FROM wrongTable"); 
?> 
+0

죄송합니다, 나는 생각했다 SILENT이 작동, 내가 원하는 모든 연결 정상적인 경우하지 않을 경우, 내가 필요, 확인하다 관리자에게 알리고 정의 된 메시지를 보여 주면 기본적으로 사용자가 PDO 기본 연결 오류를 볼 수는 없지만 display_error가 종료 된 경우에도이를 비활성화 할 수는 없습니다. – Chan

+0

php.ini로 가서'display_errors = Off'를 설정 한 다음 appache를 다시 시작하거나 서버를 재부팅하십시오. – meda

+0

나는 여전히 PDO 오류 메시지를 표시했습니다.'dispaly_errors'를 시도하기 위해 오류 코드를 작성했으며 오류 메시지가 아닙니다. 나와서 서버 설정이 맞다고 생각해 ~ – Chan