我在命令行中运行一个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());
}
任何想法?
答案 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_clw
为MDB2_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());
,这似乎可能是您在那里寻找的。 p>