1

pdo 接続を使用して、デフォルトのエラーではなく、独自のエラーを表示したいです。エラーは次のように分類できます。

1.データベースが存在しない場合

2.アクセス拒否

3.ホスト名無効

PDO接続の簡単なコードは

<?php
$host = 'localhost';
$dbname = 'test';
$user = 'root';
$password = '';

try {
    $db = new PDO("mysql:host=$host;dbname=$dbname", $user, $password); 

} catch (PDOException $e) {
 echo $e->getMessage(); 
}

?>

さて、catch セクションで if ステートメントを使用できますか? もしそうなら、どうすれば出力を達成できますか? getMessage()関数を使いたくない。

ありがとう

4

2 に答える 2

0

@ hek2mgl が既に示したように、最初にドライバーに例外が必要であることを伝える必要があります。実際のエラーを取得するには、次のように例外コードを確認できます。

...
} catch (PDOException $e) {
    switch ($e->getCode()) {
        case 1041: //  Error: 1041 SQLSTATE: HY000 (ER_OUT_OF_RESOURCES)
            $message = 'MySQL is out of resources!';
            break;

        case ...

        default:
            $message = $e->getMessage(); 
            break;
    }
}
...

SQLSTATE エラー コードのリストは、http://dev.mysql.com/doc/refman/5.1/en/error-messages-server.htmlにあります。

ドライバーによっては、PDO::errorCode代わりに を確認する必要がある場合があります。

http://php.net/manual/en/pdo.errorcode.php

于 2013-05-15T09:04:48.907 に答える
0

まず、driver_optionsコンストラクターのパラメーターを使用して、エラー時にスローされる例外を作成します。

$db = new PDO("mysql:host=$host;dbname=$dbname", $user, $password, array(
    PDO::ATTR_ERRMODE => PDO::ERRMODE_EXCEPTION
));

code次に、catch ブロックで、例外のプロパティを分析する必要があります。

switch($e->getCode()) {

    ....

}

コードのリストとその意味については、mysql のマニュアルを参照してください。

于 2013-05-15T09:00:16.977 に答える