Нарушение ограничения PHP Postgres - можно ли как-нибудь получить имя ограничения? - PullRequest
0 голосов
/ 21 апреля 2010

У нас есть веб-приложение, работающее с базой данных Postgres SQL на работе - я установил много ограничений на сервере для обеспечения согласованности данных, но у нас возникают проблемы с хорошим сообщением о том, что мешает пользователю ввести свои данные ) данные в данный момент.

Единственное, что мы можем получить, это «Нарушение ограничения», но это не очень наглядно, из Perl или непосредственно из PGAdmin мы получаем хорошую информацию о том, какое ограничение вызвало ошибку (имя ограничения) - есть ли способ сделать то же самое в PHP?

Мы можем обновить PHP или использовать другой модуль доступа к БД, если это поможет, поэтому мне интересно знать, возможно ли это сделать любым способом, который вы могли бы смело рекомендовать.

Ответы [ 2 ]

2 голосов
/ 21 апреля 2010

Вам лучше использовать pg_result_error_field , эта функция дает вам гораздо более подробную информацию об ошибке. Если вы используете хранимые процедуры и разрешаете эти исключения, включая DETAIL и HINT , обработка ошибок в вашем коде будет действительно простой.

0 голосов
/ 21 апреля 2010

Использование pg_last_error:

$c = pg_connect('service=example');
$q = 'INSERT INTO example VALUES ($1, $2)';

$s = pg_query_params($c, $q, array('XXX',2.2222));
echo pg_last_error($c);

Я получаю:

ERROR:  duplicate key value violates unique constraint "example_example_key"

"example_example_key" - название рассматриваемого ограничения.

...