PHP中PDO的错误处理_PHP
面向对象的方式
先看看如果连接错误等的处理,PHP中PDO的错误处理,使用面向对象的方式来处理:
复制代码 代码如下:
try {
$db = new PDO('mysql:host=localhost;dbname=test', $user, $pass);
$db = null;
} catch (PDOException $e) {
print "Error: " . $e->getMessage() . "
";
die();
}
?>
这里利用我们PHP 5面向对象的异常处理特征,如果里面有异常的话就初始化调用PDOException来初始化一个异常类。
PDOException异常类的属性结构:
复制代码 代码如下:
class PDOException extends Exception
{
public $errorInfo = null; // 错误信息,可以调用 PDO::errorInfo() 或 PDOStatement::errorInfo()来访问
protected $message; // 异常信息,可以试用 Exception::getMessage() 来访问
protected $code; // SQL状态错误代码,可以使用 Exception::getCode() 来访问
}
?>
这个异常处理类是集成PHP 5内置的异常处理类,我们简单的看一下PHP 5内置的异常处理类结构:
复制代码 代码如下:
class Exception
{
// 属性
protected $message = 'Unknown exception'; // 异常信息
protected $code = 0; // 用户自定义异常代码
protected $file; // 发生异常的文件名
protected $line; // 发生异常的代码行号
// 方法
final function getMessage(); // 返回异常信息
final function getCode(); // 返回异常代码
final function getFile(); // 返回发生异常的文件名
final function getLine(); // 返回发生异常的代码行号
final function getTrace(); // backtrace() 数组
final function getTraceAsString(); // 已格成化成字符串的 getTrace() 信息
}
?>
相应的,在代码中可以合适的调用 getFile() 和 getLine() 来进行错误定位,更方便的进行调试。
使用面向过程的方法
先看代码:
复制代码 代码如下:
$db = new PDO('mysql:host=localhost;dbname=test', $user, $pass);
$rs = $db->query("SELECT aa,bb,cc FROM foo");
if ($db->errorCode() != '00000'){
print_r($db->errorInfo());
exit;
}
$arr = $rs->fetchAll();
print_r($arr);
$db = null;
?>
PDO和PDOStatement对象有errorCode() 和 errorInfo() 方法,如果没有任何错误, errorCode() 返回的是: 00000 ,否则就会返回一些错误代码。errorInfo() 返回的一个数组,包括PHP定义的错误代码和MySQL的错误代码和错误信息,数组结构如下:
Array
(
[0] => 42S22
[1] => 1054
[2] => Unknown column 'aaa' in 'field list'
)
每次执行查询以后,errorCode() 的结果都是最新的,所以我们可以很容易自己控制错误信息显示。
在使用PDO进行那个PHP和数据库开发过程中,如果再碰到错误咋办?按照上面的方式处理吧。
11.3.4 PDO的错误处理
PDO提供了两个获得程序中的错误信息的方法,一个是errorCode()方法;另一个是errorInfo()方法。
1.errorCode()方法
errorCode()方法用于获取在操作数据库句柄时所发生的错误代码,这些错误代码被称为SQLSTATE代码,该方法的语法格式如下:
01 string errorCode ( void ) errorCode()方法的返回值为一个SQLSTATE,SQLSTATE是由5个数字和字母组成的代码。下面是使用errorCode()方法的示例:
【程序11-17】光盘\code\11\pdo\errorCode.php
复制代码 代码如下:
$dsn = 'mysql:dbname=shop;host=localhost';
$user_name = 'root';
$user_psw = 'root';
$pdo = new PDO($dsn, $user_name, $user_psw);
$pdo->exec("update mytable set age=28 where id=1 ");//表mytable不存在
echo "errorCode为: ".$pdo->errorCode();
?>
上述代码输出的错误代码如图11-13所示。
2.errorInfo()方法
errorInfo()方法用于获得操作数据库句柄时所发生的错误信息,该方法的语法格式如下:
01 array errorInfo ( void ) errorInfo()方法的返回值为一个数组,该数组里面包含了相关的错误信息,使用errorInfo()方法的示例代码如下:
【程序11-18】光盘\code\11\pdo\errorInfo.php
复制代码 代码如下:
$dsn = 'mysql:dbname=shop;host=localhost';
$user_name = 'root';
$user_psw = 'root';
$pdo = new PDO($dsn, $user_name, $user_psw);
$pdo->exec("update mytable set age=28 where id=1 ");//表mytable不存在
echo "errorInfo为: ";
print_r($pdo->errorInfo());
?>
上面代码输出的错误信息如图11-14所示。

ホットAIツール

Undresser.AI Undress
リアルなヌード写真を作成する AI 搭載アプリ

AI Clothes Remover
写真から衣服を削除するオンライン AI ツール。

Undress AI Tool
脱衣画像を無料で

Clothoff.io
AI衣類リムーバー

AI Hentai Generator
AIヘンタイを無料で生成します。

人気の記事

ホットツール

メモ帳++7.3.1
使いやすく無料のコードエディター

SublimeText3 中国語版
中国語版、とても使いやすい

ゼンドスタジオ 13.0.1
強力な PHP 統合開発環境

ドリームウィーバー CS6
ビジュアル Web 開発ツール

SublimeText3 Mac版
神レベルのコード編集ソフト(SublimeText3)

ホットトピック









ミドルウェアを使用して Go 関数のエラー処理を改善する: 関数呼び出しをインターセプトして特定のロジックを実行できるミドルウェアの概念を紹介します。カスタム関数でエラー処理ロジックをラップするエラー処理ミドルウェアを作成します。ミドルウェアを使用してハンドラー関数をラップし、関数が呼び出される前にエラー処理ロジックが実行されるようにします。エラーの種類に基づいて適切なエラー コードを返します。 едоточитьсянаобработкеозибо

C++ では、例外処理は try-catch ブロックを通じてエラーを適切に処理します。一般的な例外の種類には、実行時エラー、論理エラー、範囲外エラーが含まれます。ファイルを開くエラー処理を例に挙げます。プログラムがファイルを開くのに失敗すると、例外がスローされ、エラー メッセージが出力され、catch ブロックを通じてエラー コードが返されます。これにより、プログラムを終了せずにエラーが処理されます。例外処理には、エラー処理の集中化、エラーの伝播、コードの堅牢性などの利点があります。

C++ クラス設計におけるエラー処理とログ記録には、次のものが含まれます。 例外処理: カスタム例外クラスを使用して例外をキャッチして処理し、特定のエラー情報を提供します。エラー コード: 整数または列挙を使用してエラー状態を表し、戻り値で返します。アサーション: 事前条件と事後条件を確認し、条件が満たされない場合は例外をスローします。 C++ ライブラリのロギング: std::cerr および std::clog を使用した基本的なロギング。外部ログ ライブラリ: レベル フィルタリングやログ ファイル ローテーションなどの高度な機能を提供するサードパーティ ライブラリを統合します。カスタム ログ クラス: 独自のログ クラスを作成し、基礎となるメカニズムを抽象化し、さまざまなレベルの情報を記録するための共通インターフェイスを提供します。

PHP の最適なエラー処理ツールとライブラリには次のものがあります。 組み込みメソッド: set_error_handler() および error_get_last() サードパーティ ツールキット: Whoops (デバッグとエラーのフォーマット) サードパーティのサービス: Sentry (エラーの報告と監視) サードパーティライブラリ: PHP-error-handler (カスタム エラー ログおよびスタック トレース) および Monolog (エラー ログ ハンドラー)

Go 関数では、非同期エラー処理はエラー チャネルを使用して、ゴルーチンからエラーを非同期に渡します。具体的な手順は次のとおりです。 エラー チャネルを作成します。 goroutine を開始して操作を実行し、非同期でエラーを送信します。チャネルからエラーを受信するには、select ステートメントを使用します。エラー メッセージの印刷やログ記録など、エラーを非同期的に処理します。このアプローチでは、エラー処理が呼び出しスレッドをブロックせず、実行をキャンセルできるため、同時コードのパフォーマンスとスケーラビリティが向上します。

Go でのエラー処理のベスト プラクティスには、エラー タイプの使用、常にエラーを返す、エラーのチェック、複数値の戻り値の使用、センチネル エラーの使用、およびエラー ラッパーの使用が含まれます。実用的な例: HTTP リクエスト ハンドラーで、ReadDataFromDatabase がエラーを返した場合は、500 エラー応答を返します。

Golang では、エラー ラッパーを使用して、元のエラーにコンテキスト情報を追加することで新しいエラーを作成できます。これを使用すると、さまざまなライブラリまたはコンポーネントによってスローされるエラーの種類を統一し、デバッグとエラー処理を簡素化できます。手順は次のとおりです。errors.Wrap 関数を使用して、元のエラーを新しいエラーにラップします。新しいエラーには、元のエラーのコンテキスト情報が含まれています。 fmt.Printf を使用してラップされたエラーを出力し、より多くのコンテキストとアクション性を提供します。異なる種類のエラーを処理する場合は、errors.Wrap 関数を使用してエラーの種類を統一します。

Go 関数の単体テストでは、エラー処理に 2 つの主な戦略があります。1. エラーをエラー タイプの特定の値として表現し、期待値をアサートするために使用します。2. チャネルを使用してエラーをテスト関数に渡します。これは、同時実行コードのテストに適しています。実際のケースでは、関数が負の入力に対して 0 を返すようにするために、エラー値戦略が使用されます。
