Php 调用未定义的方法MDB2_error::disconnect()时发生致命错误
我正在命令行中运行一个php脚本,它连接到oracle和mssql以获取一些数据并写入文件。实际上,它是linux机器上的一个cron,需要转移到windows 2008 该命令正在引发错误: 调用中未定义的方法MDB2_error::disconnect()时发生致命错误 第63行中的path\to\script.php 第63行的代码是:Php 调用未定义的方法MDB2_error::disconnect()时发生致命错误,php,iis,mdb2,Php,Iis,Mdb2,我正在命令行中运行一个php脚本,它连接到oracle和mssql以获取一些数据并写入文件。实际上,它是linux机器上的一个cron,需要转移到windows 2008 该命令正在引发错误: 调用中未定义的方法MDB2_error::disconnect()时发生致命错误 第63行中的path\to\script.php 第63行的代码是: $db_clw = MDB2::factory($config->database->CLW->dsn); if (PEAR::isEr
$db_clw = MDB2::factory($config->database->CLW->dsn);
if (PEAR::isError($db_clw)) {
$db_clw->disconnect();
$db_banner->disconnect();
die($db->getMessage());
}
有什么想法吗?您正在对
MDB2错误对象调用disconnect方法。该方法没有断开连接的方法
$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驱动程序,而是一个错误。因此,它没有断开连接的方法,所以应该删除该行。
您可能希望在另一个disconnect语句周围加上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())到达code>,这将帮助您确定为什么$db\u clw=MDB2::factory($config->database->clw->dsn)代码>正在失败
刚刚注意到,并更新了上面的代码,将最后一条语句更改为die($db_clw->getMessage())代码>,这可能就是您在那里寻找的内容。您说得对,我需要找到到达错误语句的原因。我认为这是因为环境变量设置问题。我已经将pear的路径添加到env变量中,现在它已经不存在了。