[技術情報]
PHP4+PostgreSQL7 で構築する Web-DB 入門 |
第 3 回【最終回】 〜 PHP と PostgreSQL は仲良し〜 |
株式会社オージス総研 マーケティング企画部 山井 智博 |
▼ 目次 | |
1.はじめに。 |
test=> \d address_book Table "address_book" Attribute | Type | Modifier --------------+------+---------- name | text | address | text | phone_number | text | test=> SELECT * FROM address_book ; name | address | phone_number --------------------------+-------------------------------------------+-------------- ヤマイ@カリスマ末端社員 | 新潟県刈羽郡小国町チャーザー村 ニコニコ寮 | 12-3456-7890 (1 row) |
▼ PHP4.0.5を使用します。
▼ PostgreSQL7.1.2
PostgreSQLコネクションを開く
PostgreSQL のデータベースに接続し、データベース・ハンドルを返します。
また、接続に失敗した場合は FALSE を返します。
# 成功の場合と失敗の場合で、返り値の型が違うのは、気持ち悪いですね、、
【使用例】
$dbHandle = pg_connect("host=localhost port=5432 dbname="database");
PostgreSQLコネクションを閉じる
PostgreSQL のデータベースとの接続を、切断します。
引数として渡されたデータベース・ハンドルが、有効なコネクションの場合は TRUE を、そうでなければ FALSE を返します。
【使用例】
$result = pg_close($dbHandle);
クエリーを実行する
引数で渡されたクエリーを実行します。
クエリーが成功した場合、問い合わせ結果を、クエリーに失敗した場合 FALSE を返します。
【使用例】
$resultSet = pg_exec($dbHandle,"SELECT * FROM table");
問い合わせ結果の行数(レコード数)を取得する
pg_exec() で取得した問い合わせの結果を調査し、その行数(レコード数)を返します。
【使用例】
$resultNum = pg_numrows($resultSet);
問い合わせ結果の行を、オブジェクトとして取得する
取得した行に対応する属性を有するオブジェクトを返します。
つまり、1レコードを、オブジェクトの形で返すことになります。
【使用例】
$obj = pg_fetch_object($resultSet, $count);
ユーザは、Web ブラウザを使用し、システムを利用する。
ユーザが、「住所録を閲覧する」ボタンを押下すると、Web ブラウザ上にデータベースに登録されている住所(具体的には、名前、住所、電話番号)が一覧表示される。
ユーザは、Web ブラウザを使用し、システムを利用する。
ユーザが、「住所を登録する」ボタンを押下すると、Web ブラウザ上に名前、住所、電話番号を入力するためのテキストフィールドが表示される。
ユーザが、必要事項を入力し、「登録」ボタンを押下すると、データはデータベースに登録され、Web ブラウザ上に、登録されている住所の一覧が表示される。
1 <HTML> 2 <BODY> 3 4 <BR> 5 <B>ハイパー住所録</B><BR> 6 <BR> 7 8 <!-- メニューを表示する --> 9 ▼ メニュー<BR> 10 <FORM ACTION="address_book.php" METHOD="post"> 11 <INPUT TYPE="submit" VALUE="住所録を閲覧する" NAME="btn"> 12 <INPUT TYPE="submit" VALUE="住所を登録する" NAME="btn"> 13 </FORM> 14 <BR> 15 16 <!-- PHP スクリプト開始 --> 17 <?php 18 19 /** 20 * メイン部 押下されたボタンによって、処理を振り分ける 21 **/ 22 switch($btn) { 23 case "住所録を閲覧する": 24 printAddressBook(); 25 break; 26 27 case "住所を登録する": 28 print printInsertForm(); 29 break; 30 31 case "登録": 32 insertAddressRec($name,$address,$phoneNumber); 33 break; 34 } 35 36 exit(); 37 38 /** 39 * データベースに接続する 40 **/ 41 function connectDb() { 42 43 $dbHandle = pg_connect("host=localhost port=5432 dbname=test"); 44 45 if($dbHandle == FALSE) { 46 // エラー処理 47 } 48 49 return $dbHandle; 50 } 51 52 /** 53 * データベースとの接続を切断する 54 **/ 55 function disconnectDb( $dbHandle ) { 56 57 $result = pg_close($dbHandle); 58 59 if($result == FALSE) { 60 // エラー処理 61 } 62 } 63 64 /** 65 * SQLを実行する 66 **/ 67 function execSql($dbHandle, $sql) { 68 69 $resultSet = pg_exec($dbHandle,$sql); 70 71 if($resultSet == FALSE) { 72 // エラー処理 73 } 74 return $resultSet; 75 } 76 77 /** 78 * アドレス帳の内容を表示する 79 **/ 80 function printAddressBook() { 81 82 // データベースに接続する 83 $dbHandle = connectDb(); 84 85 // テーブル address_book より、全レコードを抽出するクエリー 86 $sql = "SELECT * FROM address_book"; 87 88 // クエリーを実行する 89 $resultSet = execSql($dbHandle,$sql); 90 91 // データベースとの接続を切断する 92 disconnectDb($dbHandle); 93 94 // 検索結果のレコード数を取得する 95 $resultNum = pg_numrows($resultSet); 96 97 $i = 0; 98 99 // テーブルを表示する 100 print "<TABLE BORDER=\"1\">"; 101 102 while($i < $resultNum) { 103 104 // レコードをオブジェクトとして取得する 105 $rec = pg_fetch_object($resultSet,$i); 106 107 print "<TR>"; 108 print "<TD>$rec->name</TD>"; 109 print "<TD>$rec->address</TD>"; 110 print "<TD>$rec->phone_number</TD>"; 111 print "</TR>"; 112 113 $i++; 114 } 115 116 print "</TABLE>"; 117 } 118 119 /** 120 * レコード追加用のフォームを表示する 121 **/ 122 function printInsertForm() { 123 124 print "データを入力して下さい。<BR>"; 125 126 print "<FORM ACTION=\"address_book.php\" METHOD=\"post\">"; 127 print "名前: <INPUT TYPE=\"text\" NAME=\"name\"><BR>"; 128 print "住所: <INPUT TYPE=\"text\" NAME=\"address\"><BR>"; 129 print "電話: <INPUT TYPE=\"text\" NAME=\"phoneNumber\"><BR><BR>"; 130 print "<INPUT TYPE=\"submit\" VALUE=\"登録\" NAME=\"btn\">"; 131 print "</FORM>"; 132 } 133 134 /** 135 * 新規にレコードを登録する 136 **/ 137 function insertAddressRec($name,$address,$phoneNumber) { 138 139 // データベースに接続する 140 $dbHandle = connectDb(); 141 142 // 新規にレコードを登録するクエリー 143 $sql = "INSERT INTO address_book VALUES('$name','$address','$phoneNumber')"; 144 145 // クエリーを実行する 146 execSQL($dbHandle,$sql); 147 148 // データベースとの接続を切断する 149 disconnectDb($dbHandle); 150 151 // 全レコードを表示する 152 printAddressBook(); 153 } 154 155 ?> 156 157 </BODY> 158 </HTML> |
8 <!-- メニューを表示する --> 9 ▼ メニュー<BR> 10 <FORM ACTION="address_book.php" METHOD="post"> 11 <INPUT TYPE="submit" VALUE="住所録を閲覧する" NAME="btn"> 12 <INPUT TYPE="submit" VALUE="住所を登録する" NAME="btn"> 13 </FORM> 14 <BR> 15 16 <!-- PHP スクリプト開始 --> 17 <?php 18 19 /** 20 * メイン部 押下されたボタンによって、処理を振り分ける 21 **/ 22 switch($btn) { 23 case "住所録を閲覧する": 24 printAddressBook(); 25 break; 26 27 case "住所を登録する": 28 print printInsertForm(); 29 break; 30 31 case "登録": 32 insertAddressRec($name,$address,$phoneNumber); 33 break; 34 } |
77 /** 78 * アドレス帳の内容を表示する 79 **/ 80 function printAddressBook() { 81 82 // データベースに接続する 83 $dbHandle = connectDb(); 84 85 // テーブル address_book より、全レコードを抽出するクエリー 86 $sql = "SELECT * FROM address_book"; 87 88 // クエリーを実行する 89 $resultSet = execSql($dbHandle,$sql); 90 91 // データベースとの接続を切断する 92 disconnectDb($dbHandle); |
94 // 検索結果のレコード数を取得する 95 $resultNum = pg_numrows($resultSet); 96 97 $i = 0; 98 99 // テーブルを表示する 100 print "<TABLE BORDER=\"1\">"; 101 102 while($i < $resultNum) { 103 104 // レコードをオブジェクトとして取得する 105 $rec = pg_fetch_object($resultSet,$i); 106 107 print "<TR>"; 108 print "<TD>$rec->name</TD>"; 109 print "<TD>$rec->address</TD>"; 110 print "<TD>$rec->phone_number</TD>"; 111 print "</TR>"; 112 113 $i++; 114 } 115 116 print "</TABLE>"; |
▼ 参考文献『PC UNIXユーザのための PostgreSQL完全攻略ガイド』 技術評論社 1999年▼ 参考リンク PostgreSQL 本家(英語) |
© 2002 OGIS-RI Co., Ltd. |
|