|
как ТИХОНЬКО обработать ошибку в ПХП?
|
|||
---|---|---|---|
#18+
привет например, удаляешь что-то через pg_query() / pg_query_params(), а оно имеет FK и ругается, что данный объект заюзан в другой таблице и ругается оно ГРОМКО, прямо в общий поток, вылазит в браузере, а мне надо ТИХОНЬКО, обработать и юзеру аккуратно вывести аяксом, что мол "ошибка там то и там то" пытался так: if (!$res = pg_query_params()) {echo pg_result_error($res);} и через pg_get_result($db); и @ юзал, но тогда вообще ничего для чего же эти ф-и тогда и как быть? ... |
|||
:
Нравится:
Не нравится:
|
|||
24.12.2017, 06:40 |
|
как ТИХОНЬКО обработать ошибку в ПХП?
|
|||
---|---|---|---|
#18+
tip78, У гугла спросите "обработка исключений php"..... ... |
|||
:
Нравится:
Не нравится:
|
|||
24.12.2017, 07:12 |
|
как ТИХОНЬКО обработать ошибку в ПХП?
|
|||
---|---|---|---|
#18+
tip78, что, Вы хотите сказать, что при использовании @ функция Вам возвращает ресурс при ошибке в запросе? ... |
|||
:
Нравится:
Не нравится:
|
|||
24.12.2017, 16:26 |
|
как ТИХОНЬКО обработать ошибку в ПХП?
|
|||
---|---|---|---|
#18+
torbasowtip78, что, Вы хотите сказать, что при использовании @ функция Вам возвращает ресурс при ошибке в запросе? вот именно, что не возвращает ничего ... |
|||
:
Нравится:
Не нравится:
|
|||
24.12.2017, 17:29 |
|
как ТИХОНЬКО обработать ошибку в ПХП?
|
|||
---|---|---|---|
#18+
ftetip78, У гугла спросите "обработка исключений php"..... ну делаю так: Код: php 1. 2.
и один хрен он в общий поток ошибку бросает а если @pg_query_params, то вообще не ловит ... |
|||
:
Нравится:
Не нравится:
|
|||
24.12.2017, 19:20 |
|
как ТИХОНЬКО обработать ошибку в ПХП?
|
|||
---|---|---|---|
#18+
*catch (Exception $err) { } ... |
|||
:
Нравится:
Не нравится:
|
|||
24.12.2017, 19:21 |
|
как ТИХОНЬКО обработать ошибку в ПХП?
|
|||
---|---|---|---|
#18+
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'а. ... |
|||
:
Нравится:
Не нравится:
|
|||
24.12.2017, 20:53 |
|
как ТИХОНЬКО обработать ошибку в ПХП?
|
|||
---|---|---|---|
#18+
MelkijPDO спасибо, но нет спасибо. написан рукожопами, захламлён и НЕбезопасен его "эмуляции" ничто по-сравнению с "инъекциями", да и не нужны они вовсе. у постгресников, в отличие от мускулей, есть чудо-функция pg_query_params(), которая закрывает 99.9% вопросов с инъекциями а всякие mysql, mysqli и PDO за столько лет так до ума и не довели ... |
|||
:
Нравится:
Не нравится:
|
|||
24.12.2017, 22:37 |
|
как ТИХОНЬКО обработать ошибку в ПХП?
|
|||
---|---|---|---|
#18+
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 - пожалуйста. Выбор есть и это хорошо. Как нормально ловить ошибки я написал. ... |
|||
:
Нравится:
Не нравится:
|
|||
24.12.2017, 23:54 |
|
как ТИХОНЬКО обработать ошибку в ПХП?
|
|||
---|---|---|---|
#18+
MelkijА то полмира пользуется, надо бы предупредить всех фреймворкописателей. ну с полмира это вы, конечно, погорячились ) а так то и джумлой с вп тоже "пол-мира" пользуется https://habrahabr.ru/post/148701/ за подсказку спасибо, примеряю её на свой фреймворк ... |
|||
:
Нравится:
Не нравится:
|
|||
25.12.2017, 00:25 |
|
как ТИХОНЬКО обработать ошибку в ПХП?
|
|||
---|---|---|---|
#18+
tip78 https://habrahabr.ru/post/148701/ И где же вы там нашли небезопасность PDO? Автор даже сам настаивает на эмуляции prepared statements и прикручивает очередной велосипед неясной геометрии колёс к mysqli. Насчёт полмира - зависит от определения мира. Для шарика Земли может и многовато, для мира PHP разработки - может и маловато. ... |
|||
:
Нравится:
Не нравится:
|
|||
25.12.2017, 11:00 |
|
как ТИХОНЬКО обработать ошибку в ПХП?
|
|||
---|---|---|---|
#18+
вот интересно, а как в mysqli (ООП) сделана обработка ошибок, что он возвращает просто false ? процедурный стиль на всё подряд кидает ошибки в общий поток ... |
|||
:
Нравится:
Не нравится:
|
|||
27.12.2017, 19:24 |
|
как ТИХОНЬКО обработать ошибку в ПХП?
|
|||
---|---|---|---|
#18+
гы, если перед запросом сделать set_error_handler('myfunc'), а в ней просто return, то он ничего не выкинет, а сама ошибка нормально обработается и на неё можно вешать событие ^^ но это конечно на любителя ... |
|||
:
Нравится:
Не нравится:
|
|||
27.12.2017, 19:38 |
|
как ТИХОНЬКО обработать ошибку в ПХП?
|
|||
---|---|---|---|
#18+
в доках написано: авторВ случае ошибка функция возвращает 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 /> нахрена? ... |
|||
:
Нравится:
Не нравится:
|
|||
27.12.2017, 19:43 |
|
как ТИХОНЬКО обработать ошибку в ПХП?
|
|||
---|---|---|---|
#18+
tip78, Оффтоп, форум по PostgreSQL. ... |
|||
:
Нравится:
Не нравится:
|
|||
27.12.2017, 19:57 |
|
|
start [/forum/topic.php?fid=53&msg=39574918&tid=1996016]: |
0ms |
get settings: |
9ms |
get forum list: |
15ms |
check forum access: |
4ms |
check topic access: |
4ms |
track hit: |
224ms |
get topic data: |
11ms |
get forum data: |
3ms |
get page messages: |
66ms |
get tp. blocked users: |
1ms |
others: | 18ms |
total: | 355ms |
0 / 0 |