PHPからPostgreSQLへpg_queryでSQL文を実行してみている。
その時に、構文間違いやデータ整合性などの理由で失敗する。
で、エラーを出して終了してしまう。
マニュアルによるとFALSEを返すはずなんだけど…。
とりあえずset_error_handlerでカスタムエラーハンドラを作って対処してみた。
function pg_query_test( $conn )
{
$sql = "INSERT INTO NO_EXIST_TABLE VALUES ( 1 );";
// エラー終了させないようエラーハンドラをセット
set_error_handler( "my_error_handler" );
$result = pg_query( $conn, $sql );
restore_error_handler();if ( $result )
{
return true;
}
else
{
return false;
}
}
function my_error_handler( $errno, $errstr, $errfile, $errline )
{
echo "[errno]: $errno\n";
echo "[errstr]: $errstr\n";
echo "[errfile]: $errfile\n";
echo "[errline]: $errline\n";
}
?>
実行してみて、errnoは2(E_WARNING)と分かった。
しかし、pg_queryの前でset_error_handlerして、終わったらrestore_error_handlerってのもあんまりスマートなやり方じゃないね…。
ひとまずこれで行っておくか…。
と思いきや、pg_queryだけじゃなくて、pg_copy_fromなんかでも同じようにエラーを出して終了しちゃう…。
さすがにpg_系が全部間違っているとは考えにくいので、DBかPHPの設定?と思い、とりあえず/etc/php.iniを見てみた。
"Error handling and logging"の部分で、
error_reporting = E_ALLとなっているのを発見。
試しに関数内で
error_reporting( E_ERROR );
にしてみたところ、失敗してもちゃんとFALSEを返すようになった!
ただ、これだと毎回error_reporting関数を呼ばなくちゃいけないので、面倒。
/etc/php.iniを変えて問題なければ、書き換えたほうが楽だね。
多分、問題ないけど検証してからやってみよう!
0 件のコメント:
コメントを投稿