PHP

PHPで簡単!SQLエラー別の条件分岐処理の実装方法

今回は、PHPを使ってSQLエラー別の条件分岐処理の方法について紹介します。

この処理を行うことで、ユーザーに対して適切なエラーメッセージを表示したり、エラー原因の追求を素早く行うことが出来ます。




【PHP】SQLエラー別の条件分岐処理の書き方

SQL文を実行する際に、try-catch構文を使用して例外処理を行う必要があります。
catch内にてSQLSTATEを取得することで、分岐することが出来ます。

} catch (PDOException $e) {
    // エラーメッセージの取得
    $errorMessage = $e->getMessage();
    
    // エラー内容に応じた条件分岐
    if (strpos($errorMessage, "SQLSTATE[42S02]") !== false) {
        // テーブルが存在しない場合の処理
        // ...
    } 
}



全体的なコード

try {
    // SQL文の実行
    $stmt = $pdo->prepare("SELECT * FROM users WHERE id = :id");
    $stmt->bindParam(':id', $id, PDO::PARAM_INT);
    $stmt->execute();
} catch (PDOException $e) {
    // エラーメッセージの取得
    $errorMessage = $e->getMessage();
    
    // エラー内容に応じた条件分岐
    if (strpos($errorMessage, "SQLSTATE[42S02]") !== false) {
        // テーブルが存在しない場合の処理
        // ...
    } elseif (strpos($errorMessage, "SQLSTATE[23000]") !== false) {
        // 一意制約違反などのエラーが発生した場合の処理
        // ...
    } else {
        // その他のエラーが発生した場合の処理
        // ...
    }
}

よくあるエラーメッセージ

23000

エラーコード:1062
SQLSTATE:23000

エラーメッセージ例:Duplicate entry '値' for key '主キー'
原因:主キーが重複するデータを登録しようとしている。

42S02

エラーコード:1146
SQLSTATE:42S02

エラーメッセージ例:Table 'データベース名.テーブル名' doesn't exist
原因:指定したテーブル名が解決できない。

42S22

エラーコード:1054
SQLSTATE:42S22

エラーメッセージ例:Unknown column 'カラム名' in 'field list'
原因:指定したカラムが見つからない。

28000

エラーコード:1045
SQLSTATE:28000

エラーメッセージ例:Access denied for user 'ユーザ名'@'ホスト名' (using password: [YES/NO])
原因:
(YESの場合)権限などのユーザ設定が間違えている。
(NOの場合)ログイン時にパスワードを入力していない、または、入力したパスワードが間違えている。

相談・質問を募集しています。

記事に関する相談・質問を募集しています。

是非この機会にどうぞ
コメントでの質問も大歓迎です!

ハヤぶろぐのLINE@登録はこちら


メールの方はこちら




-PHP