- PR -

PDO でSQLエラー時に Apache が不正終了する

1
投稿者投稿内容
テッテ
ベテラン
会議室デビュー日: 2008/03/16
投稿数: 91
投稿日時: 2008-04-30 17:06
PDO (php_pdo_oci.dll) を使って Oracle 10g に接続するアプリケーションを開発しています。
持続的な接続を使用するために、PDO のコンストラクタの引数で
PDO::ATTR_PERSISTENT に true を指定しています。
正常動作時は問題ないのですが、SQLの実行でエラーになった場合に、
Apache が不正終了してしまいます。

以下、再現コードです。

コード:
<?php
$pdo = new PDO('aaa', 'bbb', 'ccc', array(
            PDO::ATTR_PERSISTENT => true));
$pdo->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_SILENT);

$ret = $pdo->query("あいうえお");

$pdo = null;

if ($ret == false) {
    echo("failure");
} else {
    echo("success");
}

?>



実行すると、「問題が発生したため、Apache HTTP Server を終了します…」のダイアログが表示されます。
Windows のイベントログに、以下の内容が出力されます。

コード:
エラー発生アプリケーション httpd.exe、バージョン 2.2.8.0、
エラー発生モジュール php5ts.dll、バージョン 5.2.5.5、
エラー発生アドレス 0x0000adae



上記のコードは正しくないSQL(あいうえお)が実行されるので、
failure と表示されることを期待していますが、実際には上記エラーとなります。
この「あいうえお」を正しいSQLに直した場合は正常終了して「success」が表示されます。
また、PDO::ATTR_PERSISTENT => true を false に変更した場合は、
正常終了して、期待通り「failure」が表示されます。

このことから、持続的な接続が原因の1つであることには間違いないと思うのですが、
パフォーマンスの観点から、できれば持続的な接続を使用したいと考えています。
原因、対処のわかる方いらっしゃいましたら教えてください。
よろしくお願いします。


■環境

[WEBサーバ]
OS:Windows XP Professional
サーバ:Apache 2.2.8
PHP 5.2.5
Oracle 10g Client

[DBサーバ]
OS:Windows XP Professional
Oracle 10g (10.2.0.1.0)
1

スキルアップ/キャリアアップ(JOB@IT)