2016-06-17 3 views
2

, когда я использую PDO errorInfoКак получить имена столбцов в ошибке PDO?

я получаю это:

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 z[email protected] already registered 
} 
+0

хороший способ, но все версии mysql и pdo приведут к одному и тому же сообщению об ошибке? – user4254398

+0

Что я не знаю. '$ message' - это сообщение об ошибке для конкретного драйвера, поэтому я предполагаю, что будут изменения. – Mikey

Смежные вопросы