Php 调用未定义的方法MDB2_error::disconnect()时发生致命错误

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

我正在命令行中运行一个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::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()),这将帮助您确定为什么
$db\u clw=MDB2::factory($config->database->clw->dsn)正在失败


刚刚注意到,并更新了上面的代码,将最后一条语句更改为
die($db_clw->getMessage()),这可能就是您在那里寻找的内容。

您说得对,我需要找到到达错误语句的原因。我认为这是因为环境变量设置问题。我已经将pear的路径添加到env变量中,现在它已经不存在了。