PHPでDBと接続し、例外処理までする方法【PHP DB MySQL】

try-catchを使って例外処理をする

try{
    $staff_name = isset($_POST['name']) ? $_POST['name'] : '';
    $staff_pass = isset($_POST['pass']) ? $_POST['pass'] : '';
    
    $staff_name = htmlspecialchars($staff_name,ENT_QUOTES,'UTF-8');
    $staff_pass = htmlspecialchars($staff_pass,ENT_QUOTES,'UTF-8');

    //DBと接続
    $dsn = 'mysql:dbname=shop;host=localhost;charset=utf-8';
    $user = 'root';
    $password = '';
    $dbh = new PDO($dsn,$user,$password);
    $dbh -> setAttribute(PDO::ATTR_ERRMODE,PDO::ERRMODE_EXCEPTION);//

    $sql = 'INSERT INTO mat_staff (name,password) VALUES (?,?)';
    $stmt = $dbh -> prepare($sql);
    $data[] = $staff_name;
    $data[] = $staff_pass;
    $stmt -> execute($data);

    $dbh = null;

    print $staff_name.'さんを追加しました。<br>';
}catch(Exception $e){
    print 'ただいま障害により大変ご迷惑をおかけしております。';
    exit();
}


$dbh->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
このコード行は、PDO(PHP Data Objects)を使用してデータベース操作を行う際のエラーモードを設定しています。具体的には、PDOがデータベース操作でエラーに遭遇したときの振る舞いを定義しています。

解説

  • $dbh: これはPDOオブジェクトのインスタンスで、データベースハンドルを表します。PDOを使ってデータベースに接続した後、この変数を通じてクエリを実行したり、データベースの設定を変更したりします。

  • setAttribute: これはPDOオブジェクトのメソッドの一つで、PDOの設定を変更するために使用されます。第一引数には変更したい設定の名前を、第二引数にはその設定の新しい値を指定します。

  • PDO::ATTR_ERRMODE: これはPDOの設定の一つで、PDOがエラーをどのように扱うかを指定するためのオプションです。

  • PDO::ERRMODE_EXCEPTION: これはPDO::ATTR_ERRMODEの設定値の一つで、エラーが発生した場合に例外(Exception)を投げるようにPDOに指示します。これにより、エラーが発生した場合には通常のPHPの例外処理メカニズムを使用してエラーを捕捉し、適切に処理することができます。

なぜこれが重要か?

デフォルトの設定(PDO::ERRMODE_SILENT)では、PDOはエラーが発生しても単にエラーコードを設定するだけで、スクリプトの実行は停止しません。これでは、エラーが発生したことに気づかずにスクリプトを実行し続けてしまう可能性があります。PDO::ERRMODE_WARNINGを設定すると、エラーが発生すると警告が発生しますが、これもまた例外処理に比べて柔軟なエラー処理を行うことが難しいです。
PDO::ERRMODE_EXCEPTIONを設定することで、エラーが発生した際には例外が投げられ、try-catchブロックを使用してエラーを捕捉し、適切に処理することが可能になります。これにより、より安全で信頼性の高いアプリケーションを開発することができます。例外を使用することで、エラーの原因を特定しやすくなり、開発中や本番環境でのデバッグが容易になります。


Comments

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です