У меня есть простое расширение для классов PDO и PDOStatement для регистрации ошибок, если запрос происходит неправильно. Вот мой упрощенный код:
class MyPDO extends PDO
{
public function __construct($db)
{
try
{
parent::__construct('mysql:host=localhost;dbname=' . $db, $user, $pass);
$this->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_SILENT);
$this->setAttribute(PDO::ATTR_STATEMENT_CLASS, array('MyPDOStatement', array($this)));
}
catch(PDOException $e)
{
$this->error(array($e->getCode(), $e->getMessage(), '08006'));
}
}
function query($query)
{
$stmt = parent::query($query);
if ($stmt !== false)
return $stmt;
else
{
$this->error($this->errorInfo(), $query);
return false;
}
}
function error($info, $query = false)
{
// log error here
}
}
Очевидно, я переписал методы prepare () и exec (), а также метод execute () класса операторов. Когда те (или query (), как указано выше) имеют ошибку, все они работают нормально. Проблема заключается в том, что когда PDO не удается подключиться к базе данных, я получаю сообщение об ошибке «Неустранимая PHP: вызов функции-члена error () для необъектного объекта» в строке, содержащейся в перехватчике.
Я попытался заменить его на MyPDO :: error () для перехвата, но это, похоже, ничего не делает при ошибке. Я в тупике, в чем проблема.