Форум программистов, компьютерный форум, киберфорум
PHP для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.57/7: Рейтинг темы: голосов - 7, средняя оценка - 4.57
55 / 55 / 21
Регистрация: 01.03.2016
Сообщений: 594

PDO (родительский), как подавить ошибку подключения

17.09.2018, 13:27. Показов 1525. Ответов 10
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
PHP
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
function __construct( ... ){
        
        try{
            $attrs = array(PDO::ATTR_ERRMODE => PDO::ERRMODE_SILENT);
            parent::__construct(... , $attrs); // тут нет подключения
            // Какого хрена идет запись в лог ошибок при ERRMODE_SILENT
            // 
            // дальше
            // код не нужно
            // выполнять
            // Какого х, он выполняется с конструкцией 'try' ??
        }catch(PDOException $e){
            // тут пусто
        }
        
    }
Нужно полностью (в и лог не писать ни чего при error_handler) подавить ошибку о невозможности подключения.
0
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
17.09.2018, 13:27
Ответы с готовыми решениями:

Проверка подключения PDO
Здравствуйте, мне нужно проверить подключение к бд. Использую PDO try{ $db=new PDO...

Наследование подключения PDO
try{ $dbh = new PDO("mysql:host=localhost;dbname=Fraerov", 'root', ''); function func(){ $dbh= $this->$dbh; $sth =...

Конфиг. подключения для PDO
Приветствую! Решил перейти на PDO. До этого использовал mysql_, и использовал файл конфигурации для подключения к БД. То есть специальный...

10
 Аватар для otto-fukin
14 / 60 / 21
Регистрация: 15.06.2017
Сообщений: 572
17.09.2018, 15:21
Цитата Сообщение от 53ifbb Посмотреть сообщение
// Какого хрена идет запись в лог ошибок при ERRMODE_SILENT
какого хрена наследовать нормальный класс и пытаться сделать из него какашку?
Цитата Сообщение от 53ifbb Посмотреть сообщение
//
* * * * * * // дальше
* * * * * * // код не нужно
* * * * * * // выполнять
* * * * * * // Какого х, он выполняется с конструкцией 'try' ??
какого х вы решили что возникает исключение?

Добавлено через 1 минуту
Цитата Сообщение от 53ifbb Посмотреть сообщение
ERRMODE_SILENT
вдруг натолкнет на мысль мануаль почитать, PDO::ERRMODE_SILENT это режим по умолчанию
0
55 / 55 / 21
Регистрация: 01.03.2016
Сообщений: 594
17.09.2018, 17:14  [ТС]
http://php.net/manual/ru/pdo.error-handling.php
Метод PDO::__construct() будет всегда бросать исключение PDOException, если соединение оборвалось, независимо от установленного значения PDO::ATTR_ERRMODE.
0
 Аватар для otto-fukin
14 / 60 / 21
Регистрация: 15.06.2017
Сообщений: 572
17.09.2018, 19:08
Цитата Сообщение от 53ifbb Посмотреть сообщение
Метод PDO::__construct() будет всегда бросать исключение PDOException, если соединение оборвалось
Вы сами решили что соединение "оборвалось"?

Добавлено через 5 минут
PHP
1
2
3
4
5
6
7
8
9
class SuperPDO extends PDO{
    public function __construct(string $dsn, string $username = null, string $password = null, array $options = null) {
        try{
            parent::__construct($dsn, $username, $password, $options);
        }catch(PDOException $ex){
            die('PDOException');
        }
    }
}
прекрасно вываливает сообщение PDOException при неудачном подключении. Вы не только разработчиков PDO пытаетесь перехитрить, вы намудрили гораздо более мощную кучу
0
55 / 55 / 21
Регистрация: 01.03.2016
Сообщений: 594
17.09.2018, 19:23  [ТС]
otto-fukin, с PDO реальные проблемы есть.
При перекрывании __construct, действительно не создается PDOException, а просто выполняется последний catch.
Об этом говорит ошибка в логе "Создан пустой объект" ну или просто напихать много catch'ей и понять это.
Далее, даже если убрать __construct в дочернем классе и сделать обертку для создания дочернего класса, то в логи все равно попадает
PDO::__construct(): php_network_getaddresses: getaddrinfo failed
т.е. видимо из-за того, что я его расширяю.

В итоге получилось так: дочерний класс не перекрывает конструктор. try используется при создании дочернего класса, где успешно создается PDOException, но ошибка для логов все еще присутствует и пришлось добавить @ перед new.
0
 Аватар для otto-fukin
14 / 60 / 21
Регистрация: 15.06.2017
Сообщений: 572
17.09.2018, 19:36
перекрывает он конструктор. Просто конструктор должен создать объект или рухнуть с ошибкой. Давить ошибки в родительском конструкторе не нужно и неправильно

Добавлено через 6 минут
дальше в программе уже делать catch если че пошло не так. ну как-то так
0
55 / 55 / 21
Регистрация: 01.03.2016
Сообщений: 594
17.09.2018, 19:50  [ТС]
otto-fukin,
PHP
1
class SuperPDO extends PDO{ none code }
PHP
1
2
3
4
5
6
7
8
try{
            $varDB = @new SuperPDO( .. );
        }catch(PDOException $e){
            $var = new stdClass();
        }
        if(!is_object($var)){
            $var = $varDB;
        }
Если убрать @, то вываливается стандартная ошибка (см. выше). Это конкретно при неверное хосте, при других не верных данных ее нет.
А вот как для PHP 7 сделать еще не понял. Там уже как фатал идет (нет глобального обработчика искл.).
Добавлял блок (Error $e), он не срабатывает))
0
 Аватар для otto-fukin
14 / 60 / 21
Регистрация: 15.06.2017
Сообщений: 572
17.09.2018, 19:57
53ifbb, дорогой, пойми что конструктор должен подготовить объект, перед тем как он станет доступен программе, а если не получилось, то обрушить программу (или кинуть исключение). Ну никак по другому. А ты в конструкторе хочешь подавить исключение и нормальную работу программы.. не там ты ловить ошибки собираешься
0
55 / 55 / 21
Регистрация: 01.03.2016
Сообщений: 594
17.09.2018, 23:11  [ТС]
otto-fukin, У меня фабрика. Она должна вернуть или PDO или пустой объект. И мне нужно полностью убрать все сообщения и записи в логах о любых крахах при создании PDO.
Т.е. удалось создать круто, не удалось, то пустой объект.
Вот протести последний код. На php 5.3 все как задуманно, а на 7 не так))

Добавлено через 2 минуты
Цитата Сообщение от otto-fukin Посмотреть сообщение
А ты в конструкторе хочешь подавить исключение и нормальную работу программы
Я хочу перехватить все ошибки и исключения именно из PDO::__construct и обработать их.

Добавлено через 2 часа 57 минут
otto-fukin, Очень интересно получается.
set_error_handler('error_handler');
register_shutdown_function('shutdown_fun ction');

В PHP 5.3 при ошибке происходит вызов error_handler аж 2 раза и потом выброс исключения.
В PHP 5.5 вызов error_handler один раз и исключение
В PHP 7.х вызов shutdown_function и потом исключение
0
 Аватар для otto-fukin
14 / 60 / 21
Регистрация: 15.06.2017
Сообщений: 572
18.09.2018, 17:53
Цитата Сообщение от 53ifbb Посмотреть сообщение
register_shutdown_function
это будет последняя функция. Если программа упадет, то из этой функции ее уже не удастся запустить заново
Совершенно неправильный подход к обработке ошибок. Пустой объект не имеет никакого смысла. try catch с 80-х прошлого века работает. PHP дотянулся до этого ко второму десятилетию нашего века. Вы хотите вернуться обратно? Без обид, безработный художник что-ли? А на работе нет времени этой херью заниматься
0
55 / 55 / 21
Регистрация: 01.03.2016
Сообщений: 594
18.09.2018, 20:56  [ТС]
Цитата Сообщение от otto-fukin Посмотреть сообщение
Пустой объект не имеет никакого смысла.
Это уже для других уровне, да и пока абстрактно..
Цитата Сообщение от otto-fukin Посмотреть сообщение
это будет последняя функция. Если программа упадет, то из этой функции ее уже не удастся запустить заново
У меня есть эта фун-я и не обязательно она должна быть для сбора ошибок. См. внимательнее, что происходит В php 7, она не падает, а почему то вызывает эту фун-я и потом только исключение кидает.
Цитата Сообщение от otto-fukin Посмотреть сообщение
Без обид, безработный художник что-ли?
В смысле я ? Я не на кого не работаю, делаю только то что мне угодно.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
18.09.2018, 20:56
Помогаю со студенческими работами здесь

Ошибка подключения к СУБД MySQL PDO
Здравствуйте. Установлен Open Server, на нём PHP 7.2 и MySQL 5.7. Имя базы данных test, хост, логин и парроль по умолчанию. При...

Как найти ошибку подключения к бд?
Подключаюсь на C# к бд SQL Server 2008 R2 Express. Код взял из книги М.Фленова. ... OleDbConnection CreateConnection() { ...

Как обработать ошибку подключения, если прокси недоступен
Доброй ночи. Допустим я использую метод авторизации, логин, пароль и прокси, при выполнения метода авторизации в потоке с n'нным прокси,...

$pdo->execute Выдает ошибку
Здравствуйте! Весь день не могу понять почему не работает код. обьект создается корректно, записывать в базу получается, но вот при чтении...

Как подавить автопрокрутку
есть некий пользовательский компонент он помещён на FlowLayoutPanel FlowLayoutPanel задан параметр AutoScroll=true; ...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
11
Ответ Создать тему
Новые блоги и статьи
Символические и жёсткие ссылки в Linux.
algri14 15.03.2026
Существует два типа ссылок — символические и жёсткие. Ссылка в Linux — это дополнительная запись в каталоге, которая может указывать либо на inode «файла-ИСТОЧНИКА», тогда это будет «жёсткая. . .
[Owen Logic] Поддержание уровня воды в резервуаре количеством включённых насосов: моделирование и выбор регулятора
ФедосеевПавел 14.03.2026
Поддержание уровня воды в резервуаре количеством включённых насосов: моделирование и выбор регулятора ВВЕДЕНИЕ Выполняя задание на управление насосной группой заполнения резервуара,. . .
делаю науч статью по влиянию грибов на сукцессию
anaschu 13.03.2026
прикрепляю статью
SDL3 для Desktop (MinGW): Создаём пустое окно с нуля для 2D-графики на SDL3, Си и C++
8Observer8 10.03.2026
Содержание блога Финальные проекты на Си и на C++: hello-sdl3-c. zip hello-sdl3-cpp. zip Результат:
Установка CMake и MinGW 13.1 для сборки С и C++ приложений из консоли и из Qt Creator в EXE
8Observer8 10.03.2026
Содержание блога MinGW - это коллекция инструментов для сборки приложений в EXE. CMake - это система сборки приложений. Здесь описаны базовые шаги для старта программирования с помощью CMake и. . .
Как дизайн сайта влияет на конверсию: 7 решений, которые реально повышают заявки
Neotwalker 08.03.2026
Многие до сих пор воспринимают дизайн сайта как “красивую оболочку”. На практике всё иначе: дизайн напрямую влияет на то, оставит человек заявку или уйдёт через несколько секунд. Даже если у вас. . .
Модульная разработка через nuget packages
DevAlt 07.03.2026
Сложившийся в . Net-среде способ разработки чаще всего предполагает монорепозиторий в котором находятся все исходники. При создании нового решения, мы просто добавляем нужные проекты и имеем. . .
Модульный подход на примере F#
DevAlt 06.03.2026
В блоге дяди Боба наткнулся на такое определение: В этой книге («Подход, основанный на вариантах использования») Ивар утверждает, что архитектура программного обеспечения — это структуры,. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru