Фатальная ошибка вызова неопределенного метода 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());
Кажется, это то, что вы ищете там.