2

以前の質問で、odbc_connect 呼び出しで try-catch ステートメントを使用するようアドバイスを受けました。まあ、言ってやった、それが私がやろうとしたことです。

偽のログイン情報を使用してデータベースに接続しようとする次のコードは、期待どおりに動作しません。

<?php
  try
  {
    odbc_connect('BogusDatabase','BogusUser','BogusPassword');
  }
  catch (Exception $e)
  {
    echo "Something went wrong!";
  }
?>

出力は「問題が発生しました!」という文字列になると思います。代わりにこれを取得します:

くそ! これはいらない!

Wampserverを使用して PHP コードを実行しています。これが問題の一部であるかどうかはわかりません。

4

3 に答える 3

6

@Aurimas が言ったように、それを行うには error_handler を使用する必要があります。 http://php.net/manual/en/function.set-error-handler.php

この関数は、スクリプトで発生したエラーを監視し、エラーがスローされるたびに指定した関数を呼び出します。

単純なハンドラーは

function($errno, $errstr, $errfile, $errline ) {
    throw new ErrorException($errstr, $errno, 0, $errfile, $errline);
}

スクリプトでエラーが発生するたびに ErrorException をスローします。したがって、このスクリプト全体が期待どおりに動作します。

 set_error_handler(function($errno, $errstr, $errfile, $errline ) {
    throw new ErrorException($errstr, $errno, 0, $errfile, $errline);
 });
 try
{
  odbc_connect('BogusDatabase','BogusUser','BogusPassword');
}
catch (Exception $e)
{
  echo "Something went wrong!";
}
于 2012-09-15T15:15:01.033 に答える
0

PHP マニュアルの例外について:

内部 PHP 関数は主にエラー レポートを使用し、最新のオブジェクト指向拡張機能のみが例外を使用します。ただし、エラーは ErrorException を使用して単純に例外に変換できます。

ErrorExceptionを確認し、カスタム エラー ハンドルを設定して、これらのエラーをキャッチします。

于 2012-09-15T10:44:09.447 に答える
0

関数は例外をスローしていません。代わりに、警告をトリガーしています。警告を表示したくない場合は、error_reporting() を使用して実際のエラーのみを表示できます。

于 2012-09-15T11:19:20.837 に答える