【php】PDO::errorInfo()の動きの確認
問題
PDO::errorInfo() で、ドライバ固有のエラーコードを見るようにしてたら何かおかしい。
答え
PDOを使うようになったらSQLSTATE(戻り値の配列の1つ目の値)を見るのがオススメのようですね。
SQLのエラーの詳細は mysql_errno()などを利用していたソースをPDOに移行するときなどは、ドライバ固有のエラーコードを見ると簡単そうだと考えてしまいますが、MySQLでPDO::errorInfo()を使ったら以下のような動きでした。
$db = new PDO('mysql:host=localhost;dbname=test', 'user', 'password'); //例えば重複エラーが発生するSQL var_dump($db->exec('insert into t (id) values (1)')); var_dump($db->errorInfo()); //例えばエラーの発生しないSQL var_dump($db->exec('insert into t (id) values (123)')); var_dump($db->errorInfo());
# 失敗SQLのexecの戻り値 bool(false) # 失敗SQLのexecの後のerrorInfo array(3) { [0]=> string(5) "23000" # ← ここはエラーを示しており [1]=> int(1062) # ← MySQL固有のエラーコード [2]=> string(37) "Duplicate entry '1' for key 'PRIMARY'" } # 成功SQLのexecの戻り値(影響を受けた行数) int(1) # 成功SQLのexecの後のerrorInfo array(3) { [0]=> string(5) "00000" # ← ここは成功を示しているが [1]=> int(1062) # ← MySQL固有のエラーコードだけど、こちらは前回のSQLの? [2]=> string(37) "Duplicate entry '1' for key 'PRIMARY'" }
コメント