Фатальная ошибка вызова неопределенного метода MDB2_error::disconnect()

Я запускаю сценарий php в командной строке, который подключается к оракулу и mssql для получения некоторых данных и записи в файл. На самом деле это был cron на машине linux, который нужно было перенести на windows 2008.

Команда выдает ошибку:

фатальная ошибка вызова неопределенного метода MDB2_error::disconnect() в пути \to\script.php в строке63

Код вокруг строки 63:

$db_clw = MDB2::factory($config->database->CLW->dsn);
if (PEAR::isError($db_clw)) {
    $db_clw->disconnect();
    $db_banner->disconnect();
    die($db->getMessage());
}

любая идея?

3 ответа

Решение

Вы вызываете метод отключения на MDB2 error объект. Этот метод не имеет метода отключения.

$db_clw = MDB2::factory($config->database->CLW->dsn);
if (PEAR::isError($db_clw)) {
    $db_clw->disconnect();
//           ^ method does not exist
    $db_banner->disconnect();
    die($db->getMessage());
}

Так как вы звоните die немедленно, вероятно, нет необходимости использовать disconnect вообще, но если $db_clw является MDB2_Errorне имеет метода disconnectтак что не стоит пытаться это назвать. Попытка вызвать его произойдет только в случае ошибки.

Когда выдает ошибку здесь

$db_clw->disconnect();

Вы уже знаете, что $db_clw - это не драйвер MDB2, а скорее ошибка. Таким образом, он не имеет метода отключения, поэтому эту строку следует удалить. Возможно, вы захотите заключить в него свой другой оператор отключения с помощью try-catch, например:

$db_clw = MDB2::factory($config->database->CLW->dsn);
if (PEAR::isError($db_clw)) {
    //We now know $db_clw is an error, don't attempt to disconnect.
    try {
        $db_banner->disconnect();
    } catch (Exception e) {} //ignore it.
    //die($db->getMessage()); Not sure if this is what you want, I'd think
    die($db_clw->getMessage())
}

игнорируя любые проблемы с отключением, так что утверждение die($db->getMessage()); достигнут, что поможет вам определить, почему $db_clw = MDB2::factory($config->database->CLW->dsn); терпит неудачу.

Только что заметил и обновил код выше, чтобы изменить последний оператор на die($db_clw->getMessage());Кажется, это то, что вы ищете там.

Другие вопросы по тегам