55 / 55 / 21
Регистрация: 01.03.2016
Сообщений: 594

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

17.09.2018, 13:27. Показов 1554. Ответов 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
Ответ Создать тему
Опции темы

Новые блоги и статьи
Отчёт о затраченных материалах за определенный период с макетом печатной формы
Maks 21.04.2026
Отчёт из решения ниже размещён в конфигурации КА2. Задача: разработка отчёта по затраченным материалам за определённый период, с возможностью вывода печатной формы отчёта с шапкой и подвалом. В. . .
Отчёт о спецтехнике находящейся в ремонте
Maks 20.04.2026
Отчёт из решения ниже размещен в конфигурации КА2. Задача: отобразить спецтехнику, которая на данный момент находится в ремонте. Есть нетиповой документ "Заявка на ремонт спецтехники" который. . .
Памятка для бота и "визитка" для читателей "Semantic Universe Layer (Слой семантической вселенной)"
Hrethgir 19.04.2026
Сгенерировано для краткого описания по случаю сборки и компиляции скелета серверного приложения. И пусть после этого скажут, что статьи сгенерированные AI - туфта и не интересно. И это не реклама -. . .
Запрет удаления строк ТЧ документа при определённом условии
Maks 19.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа "Аккумуляторы", разработанного в конфигурации КА2. У данного документа есть ТЧ, в которой в зависимости от прав доступа. . .
Модель заражения группы наркоманов
alhaos 17.04.2026
Условия задачи сформулированы тут Суть: - Группа наркоманов из 10 человек. - Только один инфицирован ВИЧ. - Колются одной иглой. - Колются раз в день. - Колются последовательно через. . .
Мысли в слух. Про "навсегда".
kumehtar 16.04.2026
Подумалось тут, что наверное очень глупо использовать во всяких своих установках понятие "навсегда". Это очень сильное понятие, и я только начинаю понимать край его смысла, не смотря на то что давно. . .
My Business CRM
MaGz GoLd 16.04.2026
Всем привет, недавно возникла потребность создать CRM, для личных нужд. Собственно программа предоставляет из себя базу данных клиентов, в которой можно фиксировать звонки, стадии сделки, а также. . .
Знаешь почему 90% людей редко бывают счастливыми?
kumehtar 14.04.2026
Потому что они ждут. Ждут выходных, ждут отпуска, ждут удачного момента. . . а удачный момент так и не приходит.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru