0

コマンド ラインで php スクリプトを実行して、oracle と mssql に接続してデータを取得し、ファイルに書き込みます。実際には、Windows 2008 に転送する必要のある Linux マシンの cron でした。

コマンドはエラーをスローしています:

行 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

オブジェクトで disconnect メソッドを呼び出してい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、おそらくまったく使用する必要はありませんが、 isのdisconnect場合はmethod がないため、呼び出そうとしないでください。それを呼び出す試みは、エラーが発生した場合にのみ発生します。$db_clwMDB2_Errordisconnect

于 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 に答える