|
ここにある情報はかなり古くなっており、正しくなくなっている可能性があります。掲載しているサンプルコードiなどは、最新のPHPでは動作しない、もしくは、別途設定・調整が必要になるかも知れません。情報を鵜呑みにせず、あなたの手を動かして、あなたの目で確認してください。
Oracle関数(Ora_XXXX関数)は推奨されない関数となっています。PDO関数が使えない・使わない場合は、OCI8関数(現在のOracle関数)を使いましょう。
トランザクション処理の最後に、「エラーが発生していなければCOMMIT 、そうでなければROLLBACK」といった処理を必ずやりますが、ここではPHPでのOracleエラーのハンドリングについてまとめています。
まず、エラーが発生したかどうかの判断ですが、PHPマニュアルにあるOCIError/Ora_Error関数の戻り値で判断できます。しかし、OracleエラーはPHPのparseエラーなどと同様にエラーメッセージがそのまま表示されてしまいますので、これを表示しないようにし独自のエラーメッセージを表示させることになります。
サンプルですが、以下のようなテーブルを対象にしたものを作ってみました。
●テスト用テーブル定義
CREATE TABLE test(
col1 VARCHAR2(10),
col2 VARCHAR2(10)
);
●error_handling.php
<?php
function showDetail($err) {
echo "<h3>エラーです</h3>";
echo "エラーコード:" . $err['code'] . '<br>';
echo "メッセージ:" . $err['message'] . '<br>';
}
?>
<?php
error_reporting(0);
$conn = OCILogon("scott", "tiger", "orcl");
$err = OCIError();
if ($err) {
showDetail($err);
exit;
}
$sql = "INSERT INTO test VALUES ('test','長〜〜〜〜〜〜〜〜い文字列')";
$stmt = OCIParse($conn, $sql);
OCIExecute($stmt, OCI_DEFAULT);
$err = OCIError($stmt);
if ($err) {
OCIRollback($conn);
showDetail($err);
}
OCICommit($conn);
OCILogoff($conn); ?>
実行結果は、以下のような感じになります。
エラーですエラーコード:12899 メッセージ:ORA-12899: value too large for column "SCOTT"."TEST"."COL2" (actual: 13, maximum: 10)
|