поймать ошибку postgres в PHP - PullRequest
0 голосов
/ 12 июля 2010

У меня есть таблица в postgressql с ключом primare (pk_user). Если я введу неправильные параметры.

исключение вызова postgres :( ОШИБКА: двойное значение ключа нарушает уникальное ограничение "pk_user")

это нормально, но мне нравится ловить эту ошибку и преобразовывать ее в пользовательский интерфейс (это имя пользователя используется)

мой php скрипт:

$sql="INSERT INTO user (....) VALUES (....)"
@$result=pg_query($dbconn,$sql);
if(!$result) {
 $error= pg_last_error($dbconn);
 if($error==='ERROR: duplicate key value violates unique constraint "pk_user"')
   $outputmesage="this username is used";
....
}
else {
.....
}

но конструкция if($error==='ERROR: duplicate key value violates unique constraint "pk_user"') неправильно. Я не знаю, что написать это. Функция strcmp (str1, str2) также неверна.

P.s: Извините за мой плохой английский

Ответы [ 2 ]

2 голосов
/ 12 июля 2010

Вы можете использовать pg_result_error_field, но тогда вам придется использовать pg_send_query и pg_get_result (вместо pg_query и его лучшей альтернативы pg_query_params):

pg_send_query($dbconn,$sql);
$res = pg_get_result($dbconn);

# check for "UNIQUE VIOLATION"
if(pg_result_error_field($res,PGSQL_DIAG_SQLSTATE) == '23505') {
    ...

Другой способ - использовать PDO, установить обработку ошибок «ERRMODE_EXCEPTION», обработать исключения и посмотреть в свойство code исключения (которое также должно содержать код ошибки SQLSTATE.

0 голосов
/ 12 июля 2010

перед вставкой сделайте выбор для этого имени пользователя, и это решит проблему.

, но если вы попытаетесь свести к минимуму количество запросов к БД, вы можете остаться с вашим решением, просто измените условие на sth вот так:

if(strstr($error,"duplicate key value")) {
   $outputmesage="this username is used"; 
}

надеюсь, это будет полезно

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...