PDO PHP에서 쿼리 오류를 보는 방법
이 질문에 이미 답변이 있습니다.
- 내 PDO 진술이 작동하지 않습니다 1 답변
try {
$db = new PDO("mysql:host=".HOST.";dbname=".DB, USER, PW);
$st = $db->prepare("SELECT * FROM c6ode");
}
catch (PDOException $e){
echo $e->getMessage();
}
위의 경우 쿼리에 대한 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 = 사실은 지금 pdo_mysql 드라이버의 기본 설정 될 것으로 보인다. 쿼리 캐시는 그 이후로 수정 / 변경되었으며 mysqlnd 드라이버를 사용하면 EMULATE_PREPARES = false에 문제가 없었습니다.
*) 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
));
추가 설정없이 이것을 사용하고 있습니다.
if (!$st->execute()) {
print_r($st->errorInfo());
}
귀하의 불만은 예외가 발생하지 않는다는 것입니다. PDO는 예외를 발생시키지 않도록 구성되었을 가능성이 높습니다. 다음과 같이 활성화하십시오.
$db->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
테스트하는 동안 오류를 확인하는 빠른 방법 :
$error= $st->errorInfo();
echo $error[2];
/ * 오류 유발-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
)
이 오류가 발생하면 나를 위해 작동합니다.
치명적인 오류 : 정의되지 않은 메서드 mysqli :: error () 호출
if(! empty( $db->error ) ){
echo $db->error; // <- this is not a function call error()
}
https://stackoverflow.com/a/32045823
참고 URL : https://stackoverflow.com/questions/8776344/how-to-view-query-error-in-pdo-php
'developer tip' 카테고리의 다른 글
에라토스테네스의 체-소수 찾기 파이썬 (0) | 2020.11.24 |
---|---|
numpy.matrix 또는 배열을 scipy 희소 행렬로 변환하는 방법 (0) | 2020.11.24 |
두 목록을 C #의 사전에 매핑 (0) | 2020.11.23 |
$ .ajax (serialize () + extra data)를 통해 데이터를 추가하는 방법 (0) | 2020.11.23 |
Visual Studio 2010은 소스 파일을 변경 한 후 오류없이 빌드가 실패했다고 말합니다. (0) | 2020.11.23 |