php PDOでSQL文エラーをキャプチャする方法

5164 ワード

この例では、phpがPDOでSQL文エラーをキャプチャする方法について説明します.皆さんの参考にしてください.具体的には以下の通りです.
デフォルトモードを使用する---PDO::ERRMODE_SILENT
PDOStatementオブジェクトのerrorCodeプロパティをデフォルトモードで設定しますが、他の操作は行いません.
例:
prepare()メソッドとexecute()メソッドでデータベースにデータを追加し、PDOStatementオブジェクトのerroCodeプロパティを設定し、コードのエラーを手動で検出します.操作手順は次のとおりです.

$dbms='mysql';//     
$dbName='admin';//      
$user='root';//        
$pwd='password';//       
$host='localhost';//      
$dsn="$dbms:host=$host;port=3306;dbname=$dbName";
$pdo=new PDO($dsn,$user,$pwd);//     PDO  ,            $pdo
$query="insert into user (username,password) values('admin')";//     sql  
$res=$pdo->prepare($query);
$res->execute();
$code=$res->errorCode();
echo $code.'
'; if($code==00000){// , errorCode() : 00000 , echo " "; }else{ echo " :
"; echo 'SQL Query:'.$query; echo '
';
var_dump($res->errorInfo());
echo '
';
}


は のとおりです.

21S01

     :

SQL Query:insert into user (username,password) values('admin')
array(3) {
 [0]=>
 string(5) "21S01"
 [1]=>
 int(1136)
 [2]=>
 string(47) "Column count doesn't match value count at row 1"
}


モードを ---PDO::ERRMODE_WARNING
モードではPHP が され、errorCodeプロパティが されます. モードが されている は、エラーコードを にチェックしない り、プログラムはその で されます.
:
モードを し、prepare()とexecute()メソッドでデータベース のデータを み し、while とfetch()メソッドでデータのループ を し、 モードに した にエラーのSQLを する を します.

$dbms='mysql';//     
$dbName='admin';//      
$user='root';//        
$pwd='password';//       
$host='localhost';//      
$dsn="$dbms:host=$host;port=3306;dbname=$dbName";
try {
$pdo = new PDO($dsn, $user, $pwd);//     PDO  ,            $pdo
$pdo->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_WARNING);//       
$query = "select * from userrr";//     sql  
$res = $pdo->prepare($query);//      
$res->execute();
while ($result = $res->fetch(PDO::FETCH_ASSOC)) {//while                         。
echo $result['id'] . " " . $result['username'] . " " . $result['password'];
  }
}catch(PDOException $e){
die("ERROR!:".$e->getMessage().'
'); } echo " ";

は のとおりです.

Warning: PDOStatement::execute() [pdostatement.execute]: SQLSTATE[42S02]: Base table or view not found: 1146 Table 'admin.userrr' doesn't exist in D:\wampserver\www\test\test\index1.php on line 14

 
              


モードを すると、SQL にエラーが するとプロンプトが されますが、プログラムは できます.
モード----PDO::ERRMODE_EXCEPTION
モードでは、PDOExceptionが され、 コードをtry{}catch{} ブロックにカプセル できるerrorCodeプロパティが されます.キャプチャされていない は、スクリプトが され、スタックトラッキングがユーザーに が した を らせるように されます.
:
ったデータテーブルの を

$dbms='mysql';//     
$dbName='admin';//      
$user='root';//        
$pwd='password';//       
$host='localhost';//      
$dsn="$dbms:host=$host;port=3306;dbname=$dbName";
try {
$pdo = new PDO($dsn, $user, $pwd);//     PDO  ,            $pdo
$pdo->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);//      
$query = "delete from userrr where id=1";//     sql  
$res = $pdo->prepare($query);//      
$res->execute();
}catch(PDOException $e){
echo 'PDO Exception Caught: ';
echo "Error with the database:
"; echo 'SQL Query:'.$query; echo '
';
echo "ERROR:".$e->getMessage().'
'; echo "Code:".$e->getCode().'
'; echo "File:".$e->getFile().'
'; echo "Line:".$e->getLine().'
'; echo "Trace:".$e->getTraceAsString().'
'; echo '
';
}
:

PDO Exception Caught: Error with the database:
SQL Query:delete from userrr where id=1
ERROR:SQLSTATE[42S02]: Base table or view not found: 1146 Table 'admin.userrr' doesn't exist
Code:42S02
File:D:\wampserver\www\test\test\index1.php
Line:14
Trace:#0 D:\wampserver\www\test\test\index1.php(14): PDOStatement->execute()
#1 {main}


PHPに する について のある は、「PHPベースpdo データベーステクニック 」、「php+Oracleデータベースプログラム テクニック 」、「PHP+MongoDBデータベース テクニック 」、「phpオブジェクト けプログラム コース」、「php (string) 」、「php+mysqlデータベース チュートリアル」を してください.および「php データベース テクニック 」
ここで べたことが さんのPHPプログラム に つことを っています.