ホームページ > データベース > mysql チュートリアル > PDO の `prepare()` メソッドからクエリ エラーを取得して処理するにはどうすればよいですか?

PDO の `prepare()` メソッドからクエリ エラーを取得して処理するにはどうすればよいですか?

Susan Sarandon
リリース: 2024-12-11 18:09:11
オリジナル
435 人が閲覧しました

How Can I Retrieve and Handle Query Errors from PDO's `prepare()` Method?

PDO PHP の prepare() からクエリ エラーを取得する

PDO を使用してクエリを準備する場合、関連するエラーを取得することが不可欠な場合があります。これは、デバッグ目的や予期しないデータベース インタラクションの処理に特に役立ちます。

問題

次の PHP コード スニペットを考えてみましょう。

$st = $db->prepare("SELECT * FROM c6ode");
ログイン後にコピー

この場合、クエリエラー (存在しないテーブルなど) が含まれているため、それらを取得して処理する方法が不明な場合があります。エラー。

解決策

prepare() メソッドからクエリ エラーを取得するには、エラー時に例外をスローするように PDO を構成する必要があります。これは、PDO::ATTR_ERRMODE 属性を PDO::ERRMODE_EXCEPTION に設定することで実現できます。

さらに、MySQL サーバーが準備段階でクエリを検証できるようにするには、PDO::ATTR_EMULATE_PREPARES 機能を無効にすることが重要です。 。これにより、サーバーがクエリの検証を実行まで遅らせることがなくなります。

例として、次のコードを考えてみます。

<?php
$pdo = new PDO('mysql:host=localhost;dbname=test;charset=utf8', 'localonly', 'localonly');
$pdo->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
$pdo->setAttribute(PDO::ATTR_EMULATE_PREPARES, false);
$pdo->prepare('INSERT INTO DoesNotExist (x) VALUES (?)');
ログイン後にコピー

このコードが実行されると、次の詳細を含む例外がスローされます。

SQLSTATE[42S02]: Base table or view not found: 1146 Table 'test.doesnotexist' doesn't exist
ログイン後にコピー

PDO を適切に構成すると、クエリ エラーを効果的にキャプチャして処理できるようになり、効率的なデバッグとデータベースが確保されます。インタラクション。

以上がPDO の `prepare()` メソッドからクエリ エラーを取得して処理するにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
著者別の最新記事
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート