2017-01-22 9 views
0

私は(例)Oracleのストアドプロシージャ持っている:PHP PDO出力ユーザ定義の例外

CREATE OR REPLACE FUNCTION EXCEPTION_TEST 
    RETURN NUMBER 
AS 
BEGIN 
    raise_application_error(-20500, 'This is the exception text I want to print.'); 
END; 

を、私は次のコードでPDOとPHPでそれを呼び出す:

$statement = $conn->prepare('SELECT exception_test() FROM dual'); 
$statement->execute(); 

関数の呼び出しは正常に機能しますが、今では例外テキストのみを出力したいと考えています。

私はどこかで、PDOでtryとcatchを使用しないでください。これどうやってするの?

答えて

1

あなたはレポートにエラーをキャッチすべきではないことをお読みください。

ただし、に処理したい場合は、何とかそれをキャッチすることが大丈夫です。handling exception in PDO上の私の記事の例に基づいて

try { 
    $statement = $conn->prepare('SELECT exception_test() FROM dual'); 
    $statement->execute(); 
} catch (PDOException $e) { 
    if ($e->getCode() == 20500) { 
     echo $e->getmessage(); 
    } else { 
     throw $e; 
    } 
} 

ここであなたはどちらか、それは通常の方法

+0

よろしくお願いいたします。私は今このようにそれをやるつもりです。ただし、例外テキストのみを取得することはできませんか、それともですか? – Stjubit

+0

私はあなたの質問を理解していません。このテキストを関数の出力として使用しますか? –

+0

うん。 SQLストアドプロシージャと関数でエラー検出を行っているため、例外テキスト( 'これは印刷する例外テキストです。')をユーザーに出力します。 'getMessage'メソッドはたくさんのものを表示しますが、例外テキストを取得するだけです。これを達成する唯一の方法は、例外テキストのみを取得するようにメッセージを分割することですか? – Stjubit

0

あなたが実行し、応答をチェックし、エラーを取得し、例えば、次のように:

if ($statement->execute() != true) { 
    echo $statement->errorCode(); 
    echo $statement->errorInfo(); 
} 

あなたはPDO manualでより多くのオプションを見つけることができます。

+0

がわかりまし扱いにするために戻ってあなたの特定のエラーまたは再スローする例外を取得し、あなたに感謝しています。それは動作します。 '致命的なエラー:未知の例外' PDOException 'メッセージ' SQLSTATE [HY000]:一般的なエラー:20500 OCIStmtExecute:ORA-20500:これは印刷したい例外テキストです。 ORA-06512:C:\ xampp \ htdocs \ epcos \ test.phpの「5行目(ext \ pdo_oci \ oci_statement.c:148)」の「EPCOS.EXCEPTION_TEST」でスタックトレース:#0 C:\ xampp \ htdocs \ epcos \ test.php(9):PDOStatement-> execute()#1 {main}はC:\ xampp \ htdocs \ epcos \ test.phpの9行目にスローされます。 例外テキストのみを印刷するにはどうしたらいいですか? (これは例外です...)? – Stjubit

+0

特定の例外を処理したい場合は、 'try/catch'を使用します(http://stackoverflow.com/questions/11102644/pdo-exception-questions-how-to-catch-them)。あなたが知りたいのであれば、結果が成功したならば、単純な 'if'を使います。 – Peon

+0

したがって、例外テキストを取得することはできないので、例外にコード(-20500)があり、PHPでテキストを印刷する必要があるかどうかを確認する必要がありますか? – Stjubit