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

时间:2012-10-08 19:16:37

标签: php iis mdb2

我在命令行中运行一个php脚本,它连接到oracle和mssql以获取一些数据并写入文件。实际上它是linux机器上的一个cron,需要转移到windows 2008。

该命令抛出错误:

  

致命错误调用未定义的方法MDB2_error :: disconnect()in   第63行中的路径\到\ 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());
}

任何想法?

3 个答案:

答案 0 :(得分:1)

您正在MDB2 error对象上调用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());
}

答案 1 :(得分:0)

由于您立即致电die,可能根本不需要使用disconnect,但如果$db_clwMDB2_Error,则没有方法disconnect },所以你不应该试图调用它。只有在出现错误时才会尝试调用它。

答案 2 :(得分:0)

当它在这里抛出错误时

$db_clw->disconnect();

您已经知道$ db_clw不是MDB2驱动程序,而是一个错误。因此,它没有断开连接方法,因此应该删除该行。 您可能希望使用try-catch包围其他disconnect语句,例如:

$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());,这似乎可能是您在那里寻找的。