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