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 $
エラー情報を取得するにはどうすればよいですか?
setAttribute willは、PDOにエラーまたは例外をスローさせます-クエリをexecuteにすると、最新のものになります。
エミュレートされた準備済みステートメントの場合、prepare()
にはチェックがありません。
エミュレートされたプリペアドステートメントはデータベースサーバーと通信しないため、PDO :: prepare()はステートメントをチェックしません。
ただし、クエリがサーバーに送信されると、execute()
に1つあります。
ただし、mySQL 4.1以降、mySQLドライバーはネイティブのプリペアドステートメントをサポートしているため、これは適用されません。を使用して
$dbh->setAttribute( PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION );
mustは、使用するクエリの例外を引き起こします。
私もデータベースハンドルレベルでerrorInfo()
から情報を取得しようとしましたが、PDOStatement::errorInfo()
でステートメントレベルから情報を取得することになりました
PHP Webサイト:
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();
そして、エラーをチェックします。その後、エラーが発生します(ある場合)。