web-dev-qa-db-ja.com

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は何の役にも立ちません。

PHP 5.3.3 Apache 2.0ハンドラ
MySQL用PDOドライバーが有効
クライアントAPIバージョンmysqlnd 5.0.7-dev-091210-$ Revision:300533 $

エラー情報を取得するにはどうすればよいですか?

59

setAttribute willは、PDOにエラーまたは例外をスローさせます-クエリをexecuteにすると、最新のものになります。

エミュレートされた準備済みステートメントの場合、prepare()にはチェックがありません。

エミュレートされたプリペアドステートメントはデータベースサーバーと通信しないため、PDO :: prepare()はステートメントをチェックしません。

ただし、クエリがサーバーに送信されると、execute()に1つあります。

ただし、mySQL 4.1以降、mySQLドライバーはネイティブのプリペアドステートメントをサポートしているため、これは適用されません。を使用して

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

mustは、使用するクエリの例外を引き起こします。

65
Pekka 웃

私もデータベースハンドルレベルでerrorInfo()から情報を取得しようとしましたが、PDOStatement::errorInfo()でステートメントレベルから情報を取得することになりました

PHP Webサイト:

PDO :: errorInfo()は、データベースハンドルで直接実行された操作のエラー情報のみを取得します。 PDO :: prepare()またはPDO :: query()を使用してPDOStatementオブジェクトを作成し、ステートメントハンドルでエラーを呼び出した場合、PDO :: errorInfo()はステートメントハンドルからのエラーを反映しません。特定のステートメントハンドルで実行された操作のエラー情報を返すには、PDOStatement :: errorInfo()を呼び出す必要があります。

4
CINCHAPPS

これにより、エラーコードとそれに対応する詳細メッセージが出力されます。

アドバイス:これは単なるデモンストレーションです。デバッグ目的で使用します。リリースバージョンでは、エラーメッセージを公開しないでください。

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;
3
aimme

最初にクエリをexecuteしてからエラーをチェックする必要があります。次のようにします。

 $sth->execute();

そして、エラーをチェックします。その後、エラーが発生します(ある場合)。

2
shamittomar