【PHP】PDOでエラー内容を表示できるerrorInfoの使い方【MySQL】
PDOオブジェクトで直近のMySQLエラー内容を取得するメソッド、errorInfo()の使い方を解説します。
errorInfo()とは
errorInfo()とは、直近で問い合わせたSQLクエリのエラー内容を取得することが出来ます。
//エラーが出るクエリ test_flgというカラムはない $sql = "SELECT test_id, test_name, test_flg FROM test_table"; $pdo -> query($sql); print_r($pdo -> errorInfo());
(
[0] => 42S22
[1] => 1054
[2] => Unknown column ‘test_flg’ in ‘field list’
)
prepareを使用する場合は、PDOステートメントオブジェクトから実行する
prepare()メソッドで発行されるPDOステートメントオブジェクトでも、errorInfoメソッドが使用できます。
execute()されたクエリのエラー内容を取得できます。
prepare()でプレースホルダを使用してクエリを実行する場合、その時実体化させたPDOオブジェクトでないと、エラー内容を取得できないのでご注意ください。
(下記のソースコードの場合、$sthでメソッドを実行できる)
$sql = "SELECT test_id, test_name, test_flg FROM test_table"; $sth = $pdo -> preapre($sql); $sth -> execute(); print_r($sth -> errorInfo()); //$sthで実行化 $pdoでは取得できない
errorInfoで取得できる配列の中身
エラー内容は0~2の添え字の配列で取得できます。
0 | SQLSTATE 正しいクエリは’00000’が返ってくる |
---|---|
1 | エラーコード |
2 | エラー内容 |
エラー内容は英語で表示されますが、エラーコードでググると大体の問題は把握できると思います。
よくあるエラー集
pdoのerrorInfoでよく見かけるエラーをまとめてみました。
【1146】Table ‘(データベース名.テーブル名)’ doesn’t exist
存在しないテーブル名がクエリに書かれている時に起きるエラーです。
クエリ名が間違っていないか見直しましょう。
【1054】Unknown column ‘(カラム名)’ in ‘field list’
存在しないカラム名がクエリに書かれている時に起きるエラーです。
正しいカラムが指定されているか確認してみましょう。
【1064】You have an error in your SQL syntax;~
全文は、
「check the manual that corresponds to your MySQL server version for the right syntax to use near ‘(SQL文)’ at line (行数)」
SQLの構文エラーです。
スペルミスや、使用できない文法を使用している、などが考えられます。
「use near~」以降に書かれたテキストがエラー発生個所なので、周辺の記述をチェックしましょう。
【1062】Duplicate entry ‘(挿入しようとした値)’ for key ‘PRIMARY’
INSERT文で、重複する主キーを挿入しようとした時に起きるエラーです。
制約を見直す他、「INSERT IGNORE~」とすると、ユニーク制約に引っかかる場合は挿入を無視をする、という挙動を取ることが出来ます。
【1052】Column ‘(カラム名)’ in field list is ambiguous
JOIN句などで結合した際、同名のカラムがありどちらのテーブルのカラムか判断できない場合に起きるエラーです。
table_aとtable_bを結合し、どちらにもuser_idというカラムが存在する場合、どちらのデータを見るの?という明示がないと起きます。
table_a.user_idなどでしっかり元テーブルを指定しましょう。
【1222】The used SELECT statements have a different number of columns
UNION句で、結合するテーブルの列数が異なる場合に起きるエラーです。
以上、PDOでエラー内容を表示できるerrorInfoの使い方、でした。
ディスカッション
コメント一覧
まだ、コメントがありません