0

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

该命令引发错误:

对第 63 行中 path\to\script.php 中未定义方法 MDB2_error::disconnect() 的致命错误调用

第 63 行的代码是:

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

任何的想法?

4

3 回答 3

1

您正在对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());
}
于 2012-10-08T19:19:33.827 回答
0

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

于 2012-10-08T19:21:02.607 回答
0

当它在这里抛出错误时

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

于 2012-10-08T19:32:44.120 回答