IT박스

PDO에서 오류 메시지를 압축하는 방법은 무엇입니까?

itboxs 2020. 12. 9. 07:57
반응형

PDO에서 오류 메시지를 압축하는 방법은 무엇입니까?


PDO에서 오류 메시지를받을 수없는 것 같습니다.

#$dbh->setAttribute( PDO::ATTR_ERRMODE, PDO::ERRMODE_WARNING );
try {
  $sth = $dbh->prepare('@$%T$!!!');
  print_r($sth);
  print_r($dbh->errorInfo());
} catch (PDOException $e) {
    echo $e->getMessage();
}

다음 만 제공합니다.

PDOStatement Object
(
    [queryString] => @$%T$!!!
)
Array
(
    [0] => 00000
    [1] =>
    [2] =>
)

setAttribute는 아무것도 도와주지 않습니다.


MySQL 용 PHP 5.3.3 Apache 2.0 핸들러 PDO 드라이버입니다.
클라이언트 API 버전 mysqlnd 5.0.7-dev-091210-$ Revision : 300533 $

오류 정보를 얻으려면 어떻게해야합니까?


setAttribute 쿼리 실행할 때 가장 최근에 발생한 오류 또는 예외를 발생 시킵니다 .

에뮬레이트 된 준비된 명령문의 경우 체크인이 없습니다 prepare().

에뮬레이트 된 준비된 명령문은 데이터베이스 서버와 통신하지 않으므로 PDO :: prepare ()는 명령문을 확인하지 않습니다.

그러나 execute()쿼리가 서버로 전송 될 때 하나가있을 것 입니다.

그러나 mySQL 드라이버는 mySQL 4.1 이후로 기본 준비된 명령문을 지원하므로 적용되지 않아야합니다. 사용

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

사용하는 쿼리에 대해 예외 발생 해야합니다 .


나도 errorInfo()데이터베이스 핸들 수준에서 정보를 얻으려고 시도 했지만 명령문 수준에서 정보를 얻었습니다.PDOStatement::errorInfo()

PHP 웹 사이트 당 :

PDO :: errorInfo ()는 데이터베이스 핸들에서 직접 수행 된 작업에 대한 오류 정보 만 검색합니다. PDO :: prepare () 또는 PDO :: query ()를 통해 PDOStatement 개체를 만들고 문 핸들에서 오류를 호출하면 PDO :: errorInfo ()는 문 핸들의 오류를 반영하지 않습니다. 특정 명령문 핸들에서 수행 된 조작에 대한 오류 정보를 리턴하려면 PDOStatement :: errorInfo ()를 호출해야합니다.


그러면 오류 코드와 해당 세부 메시지가 인쇄됩니다.

조언 : 이것은 단지 데모 일뿐입니다. 디버깅 목적으로 만 사용하십시오. 릴리스 버전에서 일반인에게 오류 메시지를 표시하도록 설정하지 마십시오.

try{
connection=$this->get_connection();//here i brought my connection string
connection->setAttribute(PDO::ATTR_EMULATE_PREPARES,false);
connection->setAttribute(PDO::ATTR_ERRMODE,PDO::ERRMODE_EXCEPTION);
/**
Do your works here..
//$statement=$connection->prepare($sql);
//if you are using errorInfo use after prepare statement before execute.here in this method i am not using it.
//print_r($statement->errorInfo());
**/

$statement->execute();
}
catch(PDOException $e) {
              //this will echo error code with detail
              //example: SQLSTATE[42S22]: Column not found: 1054 Unknown column 'nasme' in 'field list'
              echo $e->getMessage();
            }
//$statement=null;

먼저 execute쿼리를 실행 한 다음 오류를 확인해야합니다. 이렇게하려면 다음과 같이하십시오.

 $sth->execute();

그런 다음 오류를 확인하십시오. 그러면 오류가 발생합니다.

참고 URL : https://stackoverflow.com/questions/3726505/how-to-squeeze-error-message-out-of-pdo

반응형