PDO PHP에서 쿼리 오류를 보는 방법
PHPPDO PHP에서 쿼리 오류를 보는 방법
try {
$db = new PDO("mysql:host=".HOST.";dbname=".DB, USER, PW);
$st = $db->prepare("SELECT * FROM c6ode");
}
catch (PDOException $e){
echo $e->getMessage();
}
어떻게 위의 경우 쿼리에 대한 MySQL의 오류를 확인할 수 있습니까?
해결법
-
==============================
1.오류 모드 속성 PDO :: ATTR_ERRMODE를 PDO :: ERRMODE_EXCEPTION으로 설정해야합니다. 그리고 prepare () 메소드에 의해 예외가 발생할 것으로 예상되므로 PDO :: ATTR_EMULATE_PREPARES * 기능을 비활성화해야합니다. 그렇지 않으면 MySQL 서버는 실행될 때까지 명령문을 "보지"않습니다.
오류 모드 속성 PDO :: ATTR_ERRMODE를 PDO :: ERRMODE_EXCEPTION으로 설정해야합니다. 그리고 prepare () 메소드에 의해 예외가 발생할 것으로 예상되므로 PDO :: ATTR_EMULATE_PREPARES * 기능을 비활성화해야합니다. 그렇지 않으면 MySQL 서버는 실행될 때까지 명령문을 "보지"않습니다.
<?php try { $pdo = new PDO('mysql:host=localhost;dbname=test;charset=utf8', 'localonly', 'localonly'); $pdo->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION); $pdo->setAttribute(PDO::ATTR_EMULATE_PREPARES, false); $pdo->prepare('INSERT INTO DoesNotExist (x) VALUES (?)'); } catch(Exception $e) { echo 'Exception -> '; var_dump($e->getMessage()); }
지문 (내 경우)
Exception -> string(91) "SQLSTATE[42S02]: Base table or view not found: 1146 Table 'test.doesnotexist' doesn't exist"
http://wezfurlong.org/blog/2006/apr/using-pdo-mysql/을 참조하십시오. EMULATE_PREPARES = true가 pdo_mysql 드라이버의 기본 설정 인 것 같습니다. 쿼리 캐시 문제는 그 이후로 수정되었지만 mysqlnd 드라이버를 사용하면 EMULATE_PREPARES = false와 문제가 없었습니다 (PHP 애호가 일 뿐이므로 내 말을 듣지 마십시오 ...)
*) 그리고 나서 PDO :: MYSQL_ATTR_DIRECT_QUERY가 있습니다 - 두 속성의 상호 작용을 아직 이해하지 못했음을 인정해야합니다.
$pdo = new PDO('mysql:host=localhost;dbname=test;charset=utf8', 'localonly', 'localonly', array( PDO::ATTR_EMULATE_PREPARES=>false, PDO::MYSQL_ATTR_DIRECT_QUERY=>false, PDO::ATTR_ERRMODE=>PDO::ERRMODE_EXCEPTION ));
-
==============================
2.추가 설정없이 이것을 사용하고 있습니다.
추가 설정없이 이것을 사용하고 있습니다.
if (!$st->execute()) { print_r($st->errorInfo()); }
-
==============================
3.귀하의 불만은 예외가 발사되지 않는다고 생각합니다. PDO는 대부분 예외를 발생시키지 않도록 구성됩니다. 다음과 같이 활성화하십시오.
귀하의 불만은 예외가 발사되지 않는다고 생각합니다. PDO는 대부분 예외를 발생시키지 않도록 구성됩니다. 다음과 같이 활성화하십시오.
$db->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
-
==============================
4.테스트 중 오류를 빠르게 볼 수있는 방법 :
테스트 중 오류를 빠르게 볼 수있는 방법 :
$error= $st->errorInfo(); echo $error[2];
-
==============================
5./ * 오류 발생 - BONES 테이블이 존재하지 않습니다. * /
/ * 오류 발생 - BONES 테이블이 존재하지 않습니다. * /
$sth = $dbh->prepare('SELECT skull FROM bones'); $sth->execute(); echo "\nPDOStatement::errorInfo():\n"; $arr = $sth->errorInfo(); print_r($arr);
산출
Array ( [0] => 42S02 [1] => -204 [2] => [IBM][CLI Driver][DB2/LINUX] SQL0204N "DANIELS.BONES" is an undefined name. SQLSTATE=42704 )
-
==============================
6.이 오류가 발생하면 나를 위해이 작품 :
이 오류가 발생하면 나를 위해이 작품 :
치명적인 오류 : 정의되지 않은 메서드를 호출 mysqli :: error ()
if(! empty( $db->error ) ){ echo $db->error; // <- this is not a function call error() }
https://stackoverflow.com/a/32045823
from https://stackoverflow.com/questions/8776344/how-to-view-query-error-in-pdo-php by cc-by-sa and MIT license
'PHP' 카테고리의 다른 글
PHP 문자열에서 모든 html 태그를 제거하십시오. (0) | 2018.09.17 |
---|---|
PHP 클래스 인스턴스화. 괄호를 사용하거나 사용하지 않으려면 어떻게해야합니까? [닫은] (0) | 2018.09.17 |
PDO를 사용하여 헬퍼 함수 삽입 / 업데이트 (0) | 2018.09.17 |
나는 정수 배열을 가지고 있는데, 각각을 (PHP에서) mysql 질의에 어떻게 사용합니까? (0) | 2018.09.17 |
PHP - MySQL 연결이 작동하지 않음 : 2002 해당 파일이나 디렉토리가 없습니다. (0) | 2018.09.17 |