since 2002/01/01
lastupdate 2003/01/16
   

実践的なサンプル

ここまでご紹介したサンプルでは、実際の運用には少し具合が悪いと思います。 それはエラーを想定していない書き方だからです。
そこで、一般的と思われるエラーに対処できるようにしたサンプルを紹介しておきます。
ま、偉そうに言う程のサンプルでは無いですけど(^^;;;


予想されるエラーについて

まず、エラーとして考えられるのは、何らかの原因でデータベースへ接続できない、ということがあります。 これには pg_connect() の戻り値を評価して判断します。
また、エラー出力を抑制するため @pg_connect() として実行し、 PHPによるエラー出力を抑制しておきます。
次に考えられるものとしては、SQL文の実行に失敗する、ということです。
例えばSQL文が間違っていたり、POSTされたデータの中に 不正な文字列が入っていた場合などがこれに相当します。 これには pg_exec() の戻り値を評価して判断します。 また、同じように @pg_exec() として実行します。

尚、ここで注意しておきたいのは、クエリの実行に失敗することと、 クエリの結果がない (レコードがない、又は更新されない) こととは別のものだということです。
SELECT クエリの実行が成功しても、実際にテーブル内にレコードがない場合、pg_exec() ではエラーになりませんが、 pg_numrows() では 0 が返ります。

さて、とりあえずこの二つのエラーがまず想定されるもので、ここでエラーとならなければ、 他の処理でエラーになる確率は低い(プログラミング的なミス以外では..)ので、そんなに心配する必要はないでしょう。
では、先の SELECT文を発行するサンプルとUPDATEを発行するサンプルをこの辺を踏まえたものにしてみます。
参考になりますでしょうか?

SELECT文のサンプル

$con = @pg_connect("dbname=TEST");
// データベースへの接続を評価します
if(! $con ){ 
  echo "データベースに接続できません。";
  exit ;
}
$result = @pg_exec($con, "SELECT * FROM zaiko ;"); 
// クエリの実行結果を評価します
if(! $result ){
  echo "クエリの実行に失敗しました。";
  exit ;
}  
$rows = pg_numrows($result); 
// レコード数を確認します
if( $rows == 0 ){
  echo "レコードがありません";
  exit ;
}

$row = 0;   
echo "<TABLE border=1><TR><TH>hinmei</TH><TH>zaiko</TH></TR>\n";

while( $row < $rows ){
  $DATA = pg_fetch_object( $result, $row ); 
  echo "<TR><TD>{$DATA->hinmei}</TD><TD>{$DATA->zaiko}</TD></TR>\n";

  $row ++;
}
echo "</TABLE>\n";

UPDATE文のサンプル

$con = @pg_connect("dbname=TEST");
// データベースへの接続を評価します
if(! $con ){
  echo "データベースに接続できません。";
  exit ;
}
$SQL    = "UPDATE zaiko SET zaiko = 120 WHERE hinmei = 'red' ;" ;
$result = @pg_exec($con, $SQL);
// クエリの実行結果を評価します
if(! $result ){
  echo "クエリの実行に失敗しました。";
  exit ;
}

// 更新されたレコードの数を確認します
$row = pg_cmdtuples( $result );
if( $row == 0 ){
  echo "更新されたレコードはありません。";
}else{
  echo "$row 件のレコードが更新されました。";
}