2016-06-17 4 views
2

私はPDOのerrorInfoPDOエラーで列名を取得する方法は?

を使用する場合、私はこの取得:

Array ( 
[0] => 23000 
[1] => 1062 
[2] => Duplicate entry '[email protected]' for key 'email' 
) 

を私はエコーするエラーコードのためにのみ、列名> 'メール' と1062を取得したい:

このメールのZZZ @ zzz.netはすでに登録済み

私は登録のために電子メールまたは電話番号またはユーザー名を使用しているため、

+0

コードを駆動するためにエラーを使用しないでください。代わりに検証を使用してください。その後、このエラーは非常に稀になる競合状態でのみ発生し、「もう一度やり直してください」というメッセージが必要になります。 – jkavalik

答えて

1

I と考えると、正規表現を使用する方法があります。 preg_replace_callbackを使用して、テキストを検索して置き換えることができます。

list(, $code, $message) = $dbh->errorInfo(); 
// check if duplicate error 
if ($code === 1062) { 
    echo preg_replace_callback("/^Duplicate entry '(.*)' for key '(.*)'$/", function ($m) { 
     return sprintf("this %s %s already registered", $m[2], $m[1]); 
    }, $message); 
    // this email [email protected] already registered 
} 
+0

良い方法ですが、すべてのmysqlとpdoのバージョンで同じエラーテキストが表示されますか? – user4254398

+0

それはわかりません。 '$ message'はドライバ固有のエラーメッセージですので、バリエーションがあると仮定しています。 – Mikey

関連する問題