Сбой подключения к PHP PDO приводит к превышению времени ожидания предупреждения и выполнения скрипта - PullRequest
6 голосов
/ 29 июня 2011

Я пытаюсь создать экземпляр объекта PDO следующим образом:

$this->pdo['pdo'] = new PDO('mysql:host=127.0.0.1;dbname=mydb;charset=UTF-8',
                    'myuser', 'my pass');

Я хотел бы поймать исключение, которое, как я думал, будет сгенерировано, когда сервер MySQL не работает.

PHP.net сообщает, что «PDO :: __ construct () генерирует исключение PDOException, если попытка подключиться к запрошенной базе данных не удалась».

Но если я выключу сервер базы данных и запустлю скрипт, все, что я получу, это предупреждение:

Warning: PDO::__construct() [pdo.--construct]: [2002] 'A connection attempt failed 
because the connected party did not properly respond after a period of time, or 
established connection failed because connected host has failed to respond.' in
C:\test\test.php on line 5

Fatal error: Maximum execution time of 60 seconds exceeded in C:\test\test.php 
on line 0

Нет исключений.

Есть ли прямой способ отловить ошибку (без хлопот временного задания пользовательской функции диспетчера ошибок?)

Спасибо!

Ответы [ 2 ]

4 голосов
/ 29 июня 2011

Передайте конфигурацию массива как 4-й параметр PDO ():

PDO::setAttribute ( PDO::ATTR_TIMEOUT , '5' );  //> Secs

Чтобы уменьшить время ожидания соединения

и

PDO::setAttribute ( PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);

, чтобы всегда создавалось исключение.

Использование:

new PDO(,array(

              PDO::ATTR_TIMEOUT => "10",
              PDO::ATTR_ERRMODE =>  PDO::ERRMODE_EXCEPTION         

));
0 голосов
/ 29 января 2013

У меня была похожая проблема. Я наконец решил это.

Дело в том, что у меня был "новый PDO ('mysql: host = 127.0.0.1; dbname = mydb', 'myuser', 'my pass');" в цикл for / while.

Когда я делаю 3 или 4 цикла, все в порядке. Когда у меня 5000 итераций, мой сервер MySQL, кажется, блокирует меня, и затем я получаю сообщение об ошибке «Предупреждение: PDO :: __ construct () [pdo .-- construct]: [2002]« Ошибка попытки подключения ... »».

Я знаю, что это было не слишком умно, чтобы поместить "новый PDO (...") в цикл. Надеюсь, это поможет вам, ребята.

Антуан

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...