powered by simpleCommunicator - 2.0.53     © 2025 Programmizd 02
Форумы / PostgreSQL [игнор отключен] [закрыт для гостей] / как ТИХОНЬКО обработать ошибку в ПХП?
16 сообщений из 16, страница 1 из 1
как ТИХОНЬКО обработать ошибку в ПХП?
    #39574916
tip78
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
привет
например, удаляешь что-то через pg_query() / pg_query_params(), а оно имеет FK и ругается, что данный объект заюзан в другой таблице
и ругается оно ГРОМКО, прямо в общий поток, вылазит в браузере, а мне надо ТИХОНЬКО, обработать и юзеру аккуратно вывести аяксом, что мол "ошибка там то и там то"
пытался так: if (!$res = pg_query_params()) {echo pg_result_error($res);}
и через pg_get_result($db);
и @ юзал, но тогда вообще ничего

для чего же эти ф-и тогда и как быть?
...
Рейтинг: 0 / 0
как ТИХОНЬКО обработать ошибку в ПХП?
    #39574918
fte
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
tip78,

У гугла спросите "обработка исключений php".....
...
Рейтинг: 0 / 0
как ТИХОНЬКО обработать ошибку в ПХП?
    #39575002
Фотография torbasow
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
tip78,

что, Вы хотите сказать, что при использовании @ функция Вам возвращает ресурс при ошибке в запросе?
...
Рейтинг: 0 / 0
как ТИХОНЬКО обработать ошибку в ПХП?
    #39575015
tip78
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
torbasowtip78,

что, Вы хотите сказать, что при использовании @ функция Вам возвращает ресурс при ошибке в запросе?
вот именно, что не возвращает ничего
...
Рейтинг: 0 / 0
как ТИХОНЬКО обработать ошибку в ПХП?
    #39575032
tip78
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ftetip78,

У гугла спросите "обработка исключений php".....

ну делаю так:
Код: php
1.
2.
try {pg_query_params($db,$query,array($params));}
catch {echo 'blabla';}



и один хрен он в общий поток ошибку бросает
а если @pg_query_params, то вообще не ловит
...
Рейтинг: 0 / 0
как ТИХОНЬКО обработать ошибку в ПХП?
    #39575034
tip78
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
*catch (Exception $err)
{
}
...
Рейтинг: 0 / 0
как ТИХОНЬКО обработать ошибку в ПХП?
    #39575049
Melkij
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
tip78,

лучше такие вопросы задавать в местах посвящённых именно языку программирования. Потому что к базе нюансы реализации клиентской библиотеки доступа в общем-то не относятся.
Ну да впрочем могу ответить как старый php разработчик.

Механизм исключений появился в PHP уже давно, но он существует отдельно от механизма ошибок (ещё более старого). Эта картина начала меняться с выходом php7.0 но не в кардинальном виде изменить сразу всё и кидать исключения абсолютно везде где раньше были ошибки, а постепенно даже в ядре, не то что в штатных модулях.
Поэтому catch в принципе не будет ловить ошибки, он ловит только исключения.
pg_query исключения кидать не умеет в том числе в наиболее актуальном релизе 7.2.1: https://github.com/php/php-src/blob/PHP-7.2.1/ext/pgsql/pgsql.c#L1873 Макрос PHP_PQ_ERROR объявлен выше и является простой обёрткой над генерацией E_WARNING.

Распространённой практикой разработки в PHP является зарегистрировать глобальный обработчик всех ошибок через set_error_handler , в котором бросать исключение. Это и в разработке удобнее, исключение не заметить куда сложнее чем E_NOTICE где-нибудь и позволяет штатные ошибки преобразовывать в исключения и ловить простым try catch.

И второй момент - за много лет работы я честно ни разу не видел использования именно pgsql модуля к базе. Обычно используется PDO, который и исключения кидать умеет нативно (опция PDO::ATTR_ERRMODE => PDO::ERRMODE_EXCEPTION) и умеет эмуляцию prepared statements (PDO::ATTR_EMULATE_PREPARES => true) что позволяет использовать внятный API prepared statements и не иметь проблем с пулом транзакций pgbouncer'а.
...
Рейтинг: 0 / 0
как ТИХОНЬКО обработать ошибку в ПХП?
    #39575077
tip78
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
MelkijPDO
спасибо, но нет спасибо.
написан рукожопами, захламлён и НЕбезопасен
его "эмуляции" ничто по-сравнению с "инъекциями", да и не нужны они вовсе.
у постгресников, в отличие от мускулей, есть чудо-функция pg_query_params(), которая закрывает 99.9% вопросов с инъекциями
а всякие mysql, mysqli и PDO за столько лет так до ума и не довели
...
Рейтинг: 0 / 0
как ТИХОНЬКО обработать ошибку в ПХП?
    #39575104
Melkij
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
tip78НЕбезопасен
Вы, конечно, сможете дать линки на заведённые баги? А то полмира пользуется, надо бы предупредить всех фреймворкописателей. Хотя странно, рабочего эксплоита что-то не видно уже второе десятилетие, к чему бы это?.. Только не ссылайтесь пожалуйста на кавычки gbk локали при неверно поставленной charset в dsn, это не серьёзно (если к postgresql вообще применимо, что отдельно специально проверять надо этот крайне узкий случай).
libpq PQexecParams никакой магии не делает. pdo_pgsql уходит в тот же самый PQsendQueryGuts в libpq в конечном итоге.

tip78а всякие mysql, mysqli и PDO за столько лет так до ума и не довели
mysql и не собирались доводить, уже лет 15+ как был deprecated (фактических, а не когда начал кидать E_DEPRECATED), а нынче наконец-то вовсе удалён
mysqli - да, на мой взгляд неудобный api, особенно в prepared statements секции.
pgsql совершенством вы назвать тоже не сможете, иначе вы бы не задавали обсуждаемый вопрос
Совершенства здесь нигде нет, пишите в internals предложения по улучшениям.

Да и в целом - хотите использовать ext/pgsql - пожалуйста. Выбор есть и это хорошо. Как нормально ловить ошибки я написал.
...
Рейтинг: 0 / 0
как ТИХОНЬКО обработать ошибку в ПХП?
    #39575112
tip78
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
MelkijА то полмира пользуется, надо бы предупредить всех фреймворкописателей.
ну с полмира это вы, конечно, погорячились )
а так то и джумлой с вп тоже "пол-мира" пользуется
https://habrahabr.ru/post/148701/

за подсказку спасибо, примеряю её на свой фреймворк
...
Рейтинг: 0 / 0
как ТИХОНЬКО обработать ошибку в ПХП?
    #39575263
Melkij
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
tip78 https://habrahabr.ru/post/148701/
И где же вы там нашли небезопасность PDO? Автор даже сам настаивает на эмуляции prepared statements и прикручивает очередной велосипед неясной геометрии колёс к mysqli.

Насчёт полмира - зависит от определения мира. Для шарика Земли может и многовато, для мира PHP разработки - может и маловато.
...
Рейтинг: 0 / 0
как ТИХОНЬКО обработать ошибку в ПХП?
    #39577087
tip78
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
вот интересно, а как в mysqli (ООП) сделана обработка ошибок, что он возвращает просто false ?
процедурный стиль на всё подряд кидает ошибки в общий поток
...
Рейтинг: 0 / 0
как ТИХОНЬКО обработать ошибку в ПХП?
    #39577095
tip78
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
гы, если перед запросом сделать set_error_handler('myfunc'), а в ней просто return, то он ничего не выкинет, а сама ошибка нормально обработается и на неё можно вешать событие ^^
но это конечно на любителя
...
Рейтинг: 0 / 0
как ТИХОНЬКО обработать ошибку в ПХП?
    #39577098
tip78
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
в доках написано:
авторВ случае ошибка функция возвращает FALSE , детали ошибки можно получить с помощью функции pg_last_error() если соединение с БД не нарушено.
но она кидает не false, а всё сообщение:
автор<br />
<b>Warning</b>: pg_query_params(): Query failed: ОШИБКА: повторяющееся значение ключа нарушает ограничение уникальности "users_e_idx"
DETAIL: Ключ "(e)=(email@domain.tld)" уже существует. in <b>/path/user3.php</b> on line <b>648</b><br />
нахрена?
...
Рейтинг: 0 / 0
как ТИХОНЬКО обработать ошибку в ПХП?
    #39577104
Фотография vyegorov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
tip78,

Оффтоп, форум по PostgreSQL.
...
Рейтинг: 0 / 0
как ТИХОНЬКО обработать ошибку в ПХП?
    #39577111
tip78
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
а, пардон
...
Рейтинг: 0 / 0
16 сообщений из 16, страница 1 из 1
Форумы / PostgreSQL [игнор отключен] [закрыт для гостей] / как ТИХОНЬКО обработать ошибку в ПХП?
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]