в php error log? или всёдке надо писать какой то обработчик?
сейчас включён xDebug, но он пишет только ошибка.
( ! ) Fatal error: Uncaught exception 'PDOException' with message ' in C:\xammp\test\sqlconfig\global.php on line 1035
( ! ) PDOException: in C:\xammp\test\sqlconfig\global.php on line 1035
а вот что это за ошибка? - ну общая то понятно, PDO ругается на базу, а конкретики нет.
Причём ошибка плавающая, то один запрос вывалит, то другой.
[28-Feb-2015 13:19:32 Europe/Paris] PHP Fatal error: Uncaught exception 'PDOException' with message 'SQLSTATE[HY000] [2002] Невозможно выполнить операцию на сокете, т.к. буфер слишком мал или очередь переполнена.
В pdo есть возможность выбора способа обработки ошибок - php.net/manual/ru/pdo.error-handling.php. В вашем случае, видимо, выбран PDO::ERRMODE_EXCEPTION, тогда всегда будет кидаться Exception и вам нужно вручную ловить его через try-catch. Если же выбрать режим PDO::ERRMODE_WARNING, тогда ошибки будут писаться в лог, и вы сможете удобно ознакомиться с их текстом оттуда.
Сотри, пожалуйста, свой ответ. Ты не понимаешь базовых принципов обработки ошибок. Исключения НЕ НУЖНО "вручную ловить его через try-catch" и выбирать режим PDO::ERRMODE_WARNING тоже не нужно.
К сожалению, ответ я стирать не буду, потому что запись ошибок от PDO напрямую в error-log может быть более быстрым путем к решению проблемы, чем выброс Fatal Error о непойманном исключении, хотя бы потому что эта конструкция исключит эффект от xdebug. Хотя, ты прав, теоретически разницы быть не должно, но и исключений от PDO с пустым сообщением тоже не должно быть. Кроме того, раз ты так хорошо понимаешь базовые принципы обработки ошибок на php, то наверное знаешь что допускать Fatal Error в реальном приложении - не очень похвальная практика, да и выбрасывать исключения, если их никто не ловит, тоже особого смысла нет.
Это НЕ ИСКЛЮЧИТ xdebug, которого ты ТОЖЕ не знаешь. Fatal Error в реальном приложении - это абсолютно нормальная практика, и случается сплошь рядом, у всех - от тостера до яндекса. Я тебя научу их обрабатывать - это несложно. Веб-сервер настраивается так, чтобы получив код ошибки 5хх, показывал страницу-заглушку с извинениями. И даже поймав ошибку SQL, надо все равно аварийно завершать приложение (потому что результат получится непредсказуемый) и выдавать ту же 503. То есть разницы - как ты справедливо заметил в единственнм верном из своих заявлений - никакой нет.
Не много ли ты на себя берешь так запросто указывая чего я не знаю? Раз ты так хорош в php, приведи мне пример, когда PDO выкинет PDOException с пустым сообщением об ошибке.
Мне, в общем-то, пофиг на то что ты знаешь или не знаешь. Мне важно чтобы вы ребенка не учили плохому - писать трай кетч на каждый чих и ставить какой-либо режим кроме исключений.
Если писать без фреймворка и единой точки входа, то да, сильно try-catch не порасставляешь. Если же есть возможность сделать try { $app->run(); } catch(Exception $e) { /* some processing here */ } чтобы ловить все исключения, то такой вариант поможет реализовать кастомную логику логирования или вывода страницы заглушки или всего что душа пожелает.
Никакой обработчик писать не надо.
Порождается стандартная Fatal error, которая должна содержать текст ошибки.
То есть, PDO дальше становится не при чем, и ошибка обрабатывается так же, как и все остальные. То есть, куда по умолчанию выводит ошибки РНР - туда и выведется.
Проблема, как я понимаю, в отсутствии текста ошибки. Я бы грешил на xdebug и для начала попробовал бы без него.