PostgreSQLとMySQL
RedHat Linux 6.2 以降では、標準でPostgreSQLが採用されています。インストーラで選択可能となっています。 2000年、Linux Journal の Editor's Choice Award で、 The PostgreSQL Global Develo pment Group がベストデータベース部門 で授賞。 (同誌の "2000 Readers' Choice Awards" でMySQLに続いてPostgreSQLは第2位) 2000-05-08 PostgreSQL7.0リリース(日本時間では2000-05-09) (PostgreSQL.ORG) FROM PostgreSQL Notes for Japanese WEBアクセスには、PHPを使用。 Web連携コミュニケーションでは、PostgreSQLの一人勝ち Web連携業務システムでは、PostgreSQLとOracleがシェアを争う FROM 第2回 読者調査結果発表 Linux Square 第8回 読者調査結果発表 Linux Square | リアルタイムアンケート ●趣旨 WEB Server用OSは依然として、Unix, Linuxが多いし、Windows NT/2000サーバーに対す るウイルス攻勢はますます激しい。 そこでデータベースを動かすことを考える。 そのために、PostgreSQLとMySQLを始める際に必要なリソースガイドとして作成した。 ●Script言語とPHP Microsoft-ASPに相応するのがPHP。 オープンソースでFree。 ●DBMSとPostgreSQL/MySQL 商用DBMS (Oracle, IBM DB2, Microsoft SQL Server)に対して、オープンソースでFree なのがPostgreSQL/MySQL。 ●概要とインストール Apache + PHP + PostgreSQL 実験室 がコンパクトで解りやすい説明と思う。 インストール、設定、簡単な利用開始を解説。 ●確認事項と追加事項 インストールや設定は比較的簡単だと思うけど、実際に利用するとなると問題は別。 既製サンプルや補助ツールに関して次回追記予定。[2002.2.25]
■PostgreSQLとMySQL
●PostgreSQLとMySQL ●PostgreSQL POSTGRES はUCB(カリフォルニア大学バークレー校)でマイケル・ストーンブレーカ教授のもとで開発されたクライアント・サーバ(C/S)型のオブジェクト・リレーショナル・データベース管理システム(ORDBMS) です。
●MySQL
MySQLは無償で入手できる扱いやすい軽快なRDBMS (リレーショナルデータベース管理システム)です。 PostgreSQLと並ぶオープンソースRDBMSの代表格で、欧州で特に人気があります。最大の特徴は検索の高速性に重点を絞った設計になっていることで、商用RDBMSに比べ、ロギングなど処理を遅くする機構を大幅に省いた反面、大量のデータを高速に検索することができます。 UNIX系各種OSやWindows95/98/NTなど多くのプラットフォームに対応しているのも利点で、 WindowsPCでも手軽に使えるのは嬉しいところです。 MySQLはフィンランドのMichael Wideniusさんによって1995年に開発され、隣国スウェーデンを中心に欧米に幅広く普及しています。現在その開発・サポートは専門の企業MySQL AB で行われており、このサイトからソースアーカイブまたはコンパイル済みのバイナリ配布が無償でダウンロードできます。 MySQLはバージョン3.23.19からはGNU Public Licence(GPL)による配布となりました。
●PostgreSQLとMySQLの違い PostgreSQLとの違いは?
日本ではオープンソースRDBMSといえば、PostgreSQLの方が有名です。これは比較的早くから日本人の有志が開発に加わっていたため非英語圏の言語の中で日本語の扱いが際立って充実している点が最も大きな理由でしょう。しかしMySQLも日本語サポートは他の中東欧・アジアなどの言語サポートと共に充実してきており、選択において特別決め手になるようなことはありません。イメージ先行で恐縮ですが一点だけ漠然としたことを挙げると、 PostgreSQLはいかにも「UNIXハッカーのソフトウェア」であり、 UNIXコミュニティを通じてサポート・Q&A・バージョンアップが行われている典型的なフリーソフトウェアであるのに対し、 MySQLはWindows系サーバーOSへの対応、業務システムの専門企業による豊富なサポート(あくまで欧米での話ですが)、商用RDBMSのOracleに影響を受けたと思われる各種仕様などの側面から、若干エンタープライズ色が強いことが挙げられます。 MySQLのWin32版GUIツールにはOracleのGUIツールOracle Enterprise Manager(OEM) を模したようなデザインが見られ、この辺りからもエンタープライズユースの薫りがただよってきそうです。
【機能】PostgreSQLが完全なRDBMSであるのにたいし、MySQL と mSQL は本当の意味での リレーショナル データベース管理システムではない 【使い易さ】 【コスト】 ともにフリーウェア 【その他】 ●参考資料 Linux Tutorial:比較しがたいもの、Linux DBMS パート3--1 RADKRAFT: MySQL
●WEB連携 WEBとの連携は、CGI としての利用はもちろんのこと、 Apache ウェブサーバにモジュールとして組み込める PHP や mod_perlからの利用も可能です。最近は、信頼性の高いサービスを高速に提供するために、サーバ・サイド・スクリプトが注目をあびていますが、 Postgres+PHP+ApacheによるHTTPサービスは既に5年近くの実績を持ちます。
●SQL←→CSV変換 ●PostgreSQL PostgreSQLの環境設定 - psqlツールを使って、ユーザを作成します(削除、一覧) データもSQL文で登録することもできますが、CSVファイルから一括登録可。 1)copyコマンドを使う方法 psql# copy addr from '/home1/joe/pgsql/addr.csv' using delimiters ','; 2)insert文を使う方法 unix# sh insertCSV.sh addr < addr.csv | psql testdb p g b a s h - http://www.psn.co.jp/PostgreSQL/pgbash/index-j.html pgbashは、bashシェルの中に PostgreSQL用のデータベースアクセス機能を組み込んだ シェルです。 シェルスクリプトを作成してバッチ処理で SQLを実行したり、端末から対 話的に SQLを直接実行することができます。また、簡易的なWebアプリケーションを作成 するための便利な機能を備えています ●参考 Perlの小技
●MySQL
■MySQL関連リソース
●会社・団体 Soft Agency / MySQL .http://www.softagency.co.jp/mysql/. Soft AgencyのMySQL公式ページ 日本MySQLユーザー会 .http://www.mysql.gr.jp/. 日本のMySQLユーザーグループのサイト
●マニュアル PHP/MySQLチュートリアル .http://www.hotwired.co.jp/webmonkey/programming/php/ .... 楽しい読み物風の解説でMySQLを学べるサイト。 PHPとMySQLを使ったプログラミングをはじめる人におすすめ
●一般 Linux Square: MySQLインストール完全ガイド Linuxサーバーの実験 - Apache+PHP4+PostgreSQL/MySQLのインストール 庭内ネットワークによるコミュニケーション/情報共有システム作り ---postgreSQLとMySQLの両方を共存できる方法 A mSQL and perl Web Server Mini HOWTO .http://www.linux.or.jp/JF/JFdocs/WWW-mSQL-HOWTO.html. WWWとHTMLを使った SQL クライアント/サーバー :データベースの構築方法 MySQL Mailing list japan .http://www.database.ne.jp/ml.html. MySQLに関するメーリングリストを紹介 快速!MySQLでデータベースアプリ! .http://www.atmarkit.co.jp/flinux/rensai/mysql01/mysq .... インストールからPHP,Perlからの操作まで。内容の充実した連載記事。MySQLをはじめる前の一読をおすすめ! MySQLサーバの導入 .http://www.rfs.co.jp/server/mysql/index.html. MySQLのインストール方法について詳しく解説 Apache + PHP + MySQLを使ってWebPageを作成 .http://www.ceres.dti.ne.jp/~sugasawa/lab/mysql-test- .... Apache + PHP + MySQLを使ってWebPageを作成する手順について RubyからMySQLを利用 .http://www.tmtm.org/mysql/. オブジェクト指向スクリプト言語 Ruby から MySQL を使用できるようにするための拡張ライブラリなど かねやんMySQLAdmin公式ホームページ .http://sql.jnts.ne.jp/. かねやんMySQLAdminはMySQLサーバをWindowsのGUIで簡単操作できるソフトでエクスプロ ーラ風にSQLサーバを操作できる。技術資料も充実しているサイト。 MySQL Reference Manual for version 3.23.40.
●ニュース・総説 ●Linux Square全記事インデックス:MySQL 快速MySQLでデータベースアプリ! 軽快な動作で知られるRDBMS、MySQLでDBアプリの構築を行う。MySQLのインストールに始 まり、PerlやRubyなどのスクリプトでデータベースを操作する方法までを完全解説 第1回 MySQLインストール完全ガイド 第2回 mysqlコマンドでデータベース操作 第3回 コマンドによるMySQL管理テクニック 第4回 PerlでMySQL操作CGIを作ろう 第5回 PHPで実用アプリケーションを作ろう(前編) 第6回 PHPで実用アプリケーションを作ろう(後編) 第7回 Rubyで作るデータベースCGI 第8回 Servlet/JSP+MySQLでアプリサーバ その1 第9回 Servlet/JSP+MySQLでアプリサーバ その2 第10回 Servlet/JSP+MySQLでアプリサーバ その3 最終回 MySQLの高度な管理とチューニングテクニック
●リンク集
●レンタルサーバー たくさんあるけど、特にDB重視ということで、以下。 ●Akira Internet Service ---ベーシック / エコノミー 各30MB/150MB(DBは別に30MB/無制限) ;月額\1800/\2600 CGI/SSI/PHP3/PHP4/Telnet/SSH/FTP ; JSP(JavaServer Pages)/サーブレット ; データベース(PostgreSQL/MySQL/GDBM)
●書籍 ●リンク集 MySQL Books[日本MySQLユーザー会] は、網羅している。 その中から、以下のものが良さそう... ●解説書 MySQL 徹底攻略ガイド[技術評論社] - 志村 伸弘 著 / B5変形判408p;ISBN4-7741-1516-9 / 2002年7月5日発売 価格3280円+税 ; CD-ROM付録
●PostgreSQL
■PostgreSQL関連リソース
●会社・団体 ●日本PostgreSQLユーザー会 - http://www.postgresql.jp/ - PostgreSQL 7.2.1 付属ドキュメント ---PostgreSQL リリース情報 /PostgreSQL ダウンロード情報 /PostgreSQL 日本語ドキュメント PostgreSQLインターフェース /PostgreSQL参考文献・URL一覧 PostgreSQL使用サイトリンク集 /ライブラリ・アーカイブ /pgsql-jp ML 案内 ●PostgreSQL web - http://www.postgresql.org/ ●SRA (Software Research Associates, Inc.) - http://www.sra.co.jp/ - PostgreSQL 7.3について -日本語によるPostgreSQL 7.3に関する技術情報 ---PostgreSQL 7.1日本 語マニュアル Linux, PostgreSQL関連ソリューション提供 PostgreSQL 7.0 について - http://www.sra.co.jp/people/t-ishii/PostgreSQL/7.0/ インストール方法(基礎編)、Apach+PHPのインストール方法など詳細に解説 PostgreSQL mailing list in Japan - http://www.sra.co.jp/people/t-ishii/PostgreSQL/ PostgreSQLのメーリングリスト。マニュアル、最新情報等、PostgreSQLの管理者&ユーザー&開発者必見のサイト
●マニュアル類 ●PostgreSQL7.1日本語マニュアル - http://osb.sra.co.jp/PostgreSQL/Manual/ PostgreSQL7.1の日本語マニュアルのHTML形式、全文検索、ダウンロード用を選択できる PostgreSQL 7.1.3 ドキュメント(日本語版 1.6) - http://osb.sra.co.jp/PostgreSQL/Manual/PostgreSQL-7.1-ja/ HTML形式日本語マニュアル PostgreSQL7.1マニュアル全文検索 - http://osb.sra.co.jp/PostgreSQL/Manual/cgi-bin/namazu.cgi 全文検索システムによりPostgreSQL7.1の日本語マニュアルを検索できる ●PostgreSQL 日本語マニュアル - http://www.net-newbie.com/postgres/ ●PostgreSQL 7.2.3 管理者用ガイド - http://www.postgresql.jp/document/pg721doc/admin/index.html by PostgreSQL グローバル開発グループ ●PostgreSQL 関数一覧
●一般 ●Tatsuo Ishii's web page! ---PC UNIXユーザのための PostgreSQL完全攻略ガイドの著者 石井達夫氏のページ ---PostgreSQL mailing list in Japan ---日本ポストグレスユーザー会講演資料 ---PostgreSQL Japanese documents ●PostgreSQL Notes for Japanese by Jun Kuwamura ---ニュース /ポストグレス・キュー・エルの紹介 /和訳文書,FAQ /文書和訳プロジェクト インストールと設定 /日本語版バイナリパッケージ /PHPでWEBと連携 ODBCドライバ /ロゴ /サポート /関連サイトへのリンク ---PostgreSQL Tutorial ●インターウィズ ---PostgreSQLの関連情報 ---PostgreSQL ODBC Driver 日本語版 ●PostgreSQLの部屋 ---PostgreSQL-JDBCドライバ 修正版公開 ほか、PostgreSQL DBサーバのインストール / Apache1.3とPHP3のインストール PSQLコマンドによる簡易検索の例 / PHP3 による検索の例 / PHPプログラミングガイド JavaアプレットとJDBCドライバによる検索の例 ●PostgreSQLしてみよう ---http://itnavi.com/PGSQLsiyou.htm :PostgreSQLのインストール方法から運用方法まで詳しく解説 ●特集 Linux 2.4.2 : PostgreSQL 7.1.1 のインストール[EZ-NET] ---テンストールから設定 ●PostgreSQLの小部屋 --- http://www2.komonet.ne.jp/~psql/ ; 解説とプログラム ●PostgreSQLで作るLinuxデータベース - http://www.atmarkit.co.jp/flinux/index/indexfiles/postgreindex.html PostgreSQLの歴史からインストール方法、プログラムからの操作、サンプルコードの紹介と内容の充実した連載記事でおすすめ! ●itboost インストール設定 - http://itb-tech.itboost.co.jp/inst/inst_00.php Apache、PHP、MySQL、PostgreSQLなどのインストール設定に関する詳細な資料があるitboostのサイト ●MediaWeb: データベース - ここはProviderなんだけど、あらゆるデータベースについての実務的な解説を扱っている [DATABASE] PostgresSQL+PHP接続テスト/ PostgresSQLサーバーコマンド / PostgresSQLユーザーコマンド / PostgresSQL PSQLコマンド / SQLコマンド概要 Filemakerについても... 更に各種サーバー解説
●ツール ●PostgreSQL/PHP ---PHP3 + PostgreSQL 汎用DB検索更新ツール CSL WEB FORM ソースコード /PostgreSQL+PHP ソースコードジェネレーター 解説スライド ●PostgreSQL:Windows-Native サーバー & クライアントパッケージ ---For Windows-NT4 or Windows-2000 ダウンロードサイト ●pgMan : PostgreSQL Manager ---pgManはフリーのRDBサーバーであるPostgreSQLをWEBブラウザを通じてコントロール するためのツールです pgMan0.5.6+簡易インストーラと必要なソフト(RPMファイル)付き(3.7MB程度) pgMan0.5.6のみ(50KB) ※PostgreStudio WINDOWS用 2.0 - PostgreSQL を Web ブラウザから簡単に操作できる Web アプリケーション(SQL入力不要!!) (2003.1.14 472,288バイト フリーソフト) ※psqledit 2.2.3.1 - PostgreSQL用のSQLエディタと実行環境 (2003.2.12 347,436バイト フリーソフト) ※かねやんPgSQLAdmin 0.10ベータ - PostgreSQLアドミニストレータソフト (2002.1.12 357,048バイト フリーソフト) ※Webサーバ用 PHPスクリプト(PostgreSQL処理) - PostgreSQL処理など、LINUX環境で利用できるPHPで作られたWEBツール (2001.9.17 46,950バイト フリーソフト) ■MySQL ※かねやんMySQLAdmin - MySQL アドミニストレータソフト (2002.2.22 フリーソフト) ■参考 PostgreSQL使用サイトリンク集(フリーウェア) - http://www.postgresql.jp/projects/links/
●自動化処理ツール PostgreSQLは、アプリケーションとしてみると扱いやすいものではない。 少なくともWindows時代らしくない。 しかし自動化の試みはされている。 ●ソフトウェア工房 PostgreSQL + PHP ソースコードジェネレーター PostgreSQL 汎用 DB 検索ツール CSL WEB FORM - ブラウザから、DB の 検索 ( 検索条件指定・集計・ソート )を行います。 プログラムレス:SQL文を書く必要はありません。 データー入力(新規登録・変更)や表作成の機能もあります。
●製品 SkyBoard[トップマネジメントサービス] ---PHPとオープンソースRDBMS「PostgreSQL」で作成された日本語対応グループウエア 「SkyBoard」を開発・配布している。製品概要,FAQ,ダウンロード・ページなどがある。無料。 日本クオリティソフト ---PostgreSQL+PHP3で作成された商用グループウエア「Contacts Office」のサイト。製 品・価格情報,オンラインデモなどがある。
●ニュース・総説 ●Linux Square全記事:PostgreSQL/a> http://www.atmarkit.co.jp/flinux/index/indexfiles/index-linux.html#postgres 第1回 商用データベースに負けないPostgreSQL 第2回 PostgreSQLをコマンドラインから操作する 最終回 PostgreSQLをプログラムから操作する ●PHP4+PostgreSQL7 で構築する Web-DB 入門 ●SRA が Windows RDBMS 市場に参入[2002.11.27] - 株式会社 SRAは2002年11月27日、オープンソース DB PostgreSQL の Windows 版 「PowerGres」を開発、2003年3月にも発売すると発表。稼働環境はWindows 2000/Windows XP。 発売の時期は2003年3月を予定、価格は48,000円、2003年1月にはβ版の無償配布を予定。
●リンク集 Yahoo! Japan: PostgreSQL ---コンピュータとインターネット > ソフトウェア > 一般ビジネスソフト > データベース > All About Japan:PostgreSQLに関するサイト Google Directory: PostgreSQL - http://directory.google.com/Top/Computers/Software/Databases/PostgreSQL/
●レンタルサーバー たくさんあるけど、特にDB重視ということで、以下。 ●Xrea.com(エクスリア) --- 無料(広告有);50〜150MB(申請制)・複数アカウント可; Linux-Apache CGI/SSI(Perl・Ruby・Python・C・PHP3/4)が利用可能 データベースが利用可能(MySQL/PostgreSQL) 全文検索Namazu/.htaccess/商用可;http://ID.サーバー名.xrea.com/ ●Komonet --- 初期設定\1000 +3か月分\2,400(月\800) ; 6か月分\3,900(月\650)、1年分\6,000(月\500) ; 30MB +50MB ★PHPの小部屋 --- http://www.komonet.ne.jp/~php/ ; 解説とスクリプト提供 ★PostgreSQLの小部屋 --- http://www2.komonet.ne.jp/~psql/ ; 解説とプログラム ●Akira Internet Service ---ベーシック / エコノミー 各30MB/150MB(DBは別に30MB/無制限) ;月額\1800/\2600 CGI/SSI/PHP3/PHP4/Telnet/SSH/FTP ; JSP(JavaServer Pages)/サーブレット ; データベース(PostgreSQL/MySQL/GDBM) ●CPI - PostgreSQLデータベースにウェブベースのインターフェイスを用意。また、ツール 「テーブル作成フォーム」と「SQL→CSVデータコンバータ」。「データベースQuery入 力」で検索表示利用可。サーバーレンタル代月3000円〜 ●ホストプロバイダー - [スタンダード] \3,980; 300MB; 独自CGI,PHP,SSH,PostgreSQL,MySQLが利用可能 ●日本のjpレンタルサーバー: - PostgreSQL利用のデータベース;サーバーレンタル代月3000円〜 SQL→CSVデータコンバーター/データベース作成ウィザード/データベースQuery入力 テーブル数最大10-120 /レコード数最大 *a 1,000-12,000 /フィールド数最大*a 25-300 LHS - 月3700円; SQL→CSVデータコンバーター/データベース作成ウィザード/データベースQuery入力
●書籍 PC UNIXユーザのための PostgreSQL完全攻略ガイド改訂第3版 石井達夫 著 B5変形判/全528ページ/本体価格3,480円+税 技術評論社(ISBN4-7741-1226-7) CD-ROM2枚付き ;2001/6/4発売*品切れ中 ★今すぐ導入! PHP×PostgreSQLで作る 最強Webシステム[技術評論社] 石井達夫 著 / B5変形判400p CD-ROM付き;価格2880円+税 ISBN4-7741-1647-5 / 2002年12月19日発売; 雑誌データベースサンプル解説 →サポートページ Windowsユーザのための PostgreSQL 導入活用ガイド[技術評論社] 谷田豊盛 著 (2002年11月27日発売)/価格2980円+税 B5変形判296p CD-ROM付き; PostgreSQL オフィシャルマニュアル[インプレス] 発売日: 2002.01.28発売 、定価: 本体4,980円+税 / B5変形判912p CD-ROM付き; PostgreSQL Global Development Group 著/日本 PostgreSQLユーザー会、株式会社 SRA 訳 エキスパートから学ぶ PostgreSQL活用テクニック[インプレス] B5変形判496p CD-ROM付き;定価(本体3,980円+税)、2002.03.28発売 Richard Stones、Neil Matthew 著/株式会社スリー・エー・システムズ 監訳
■PostgreSQL実習
●主要コマンド PostgreSQL 7.1.3 レファレンスマニュアル - http://osb.sra.co.jp/PostgreSQL/Manual/PostgreSQL-7.1-ja/reference.html ■SQL コマンド ●ABORT — 現在のトランザクションのアボート ●ALTER GROUP — ユーザをグループに追加、またはユーザをグループから削除 ●ALTER TABLE — テーブルのプロパティの更新 ●ALTER USER — ユーザアカウント情報の変更 ●BEGIN — 連鎖モードでのトランザクションの開始 ●CHECKPOINT — 強制的にトランザクションログのチェックポイントを実行 ●CLOSE — カーソルの閉鎖 ●CLUSTER — 記憶領域のクラスタ構成情報のサーバへの供給 ●COMMENT — オブジェクトへのコメントの追加 ●COMMIT — 現在のトランザクションのコミット ●COPY — ファイルとテーブル間でデータのコピー COPY [ BINARY ] table [ WITH OIDS ] FROM { 'filename' | stdin } [ [USING] DELIMITERS 'delimiter' ] [ WITH NULL AS 'null string' ] COPY [ BINARY ] table [ WITH OIDS ] TO { 'filename' | stdout } [ [USING] DELIMITERS 'delimiter' ] [ WITH NULL AS 'null string' ] ●CREATE AGGREGATE — 新しい集約関数の定義 ●CREATE CONSTRAINT TRIGGER — 制約をサポートするトリガの作成 ●CREATE DATABASE — 新しいデータベースの作成 ●CREATE FUNCTION — 新しい関数の定義 ●CREATE GROUP — 新しいグループの作成 ●CREATE INDEX — 補助的インデックスの作成 CREATE [ UNIQUE ] INDEX index_name ON table [ USING acc_name ] ( column [ ops_name ] [, ...] ) CREATE [ UNIQUE ] INDEX index_name ON table [ USING acc_name ] ( func_name( column [, ... ]) [ ops_name ] ) ●CREATE LANGUAGE — 関数のための新しい言語の定義 ●CREATE OPERATOR — 新しいユーザ演算子の定義 ●CREATE RULE — 新しいルールの定義 ●CREATE SEQUENCE — 新しいシーケンス番号生成機構の作成 ●CREATE TABLE — 新しいテーブルの作成 CREATE [ TEMPORARY | TEMP ] TABLE table_name ( { column_name type [ column_constraint [ ... ] ] | table_constraint } [, ... ] ) [ INHERITS ( inherited_table [, ... ] ) ] where column_constraint can be: [ CONSTRAINT constraint_name ] { NOT NULL | NULL | UNIQUE | PRIMARY KEY | DEFAULT value | CHECK (condition) | REFERENCES table [ ( column ) ] [ MATCH FULL | MATCH PARTIAL ] [ ON DELETE action ] [ ON UPDATE action ] [ DEFERRABLE | NOT DEFERRABLE ] [ INITIALLY DEFERRED | INITIALLY IMMEDIATE ] } and table_constraint can be: [ CONSTRAINT constraint_name ] { UNIQUE ( column_name [, ... ] ) | PRIMARY KEY ( column_name [, ... ] ) | CHECK ( condition ) | FOREIGN KEY ( column_name [, ... ] ) REFERENCES table [ ( column [, ... ] ) ] [ MATCH FULL | MATCH PARTIAL ] [ ON DELETE action ] [ ON UPDATE action ] [ DEFERRABLE | NOT DEFERRABLE ] [ INITIALLY DEFERRED | INITIALLY IMMEDIATE ] } ●CREATE TABLE AS — SELECT の結果から新しいテーブルを作成 CREATE [ TEMPORARY | TEMP ] TABLE table [ (column [, ...] ) ] AS select_clause ●CREATE TRIGGER — 新しいトリガの作成 ●CREATE TYPE — 新しい基本データ型の定義 ●CREATE USER — 新しいデータベースユーザの作成 ●CREATE VIEW — 仮想テーブルの作成 ●DECLARE — テーブルアクセス用のカーソルの定義 ●DELETE — テーブルから行を削除 DELETE FROM [ ONLY ] table [ WHERE condition ] ●DROP AGGREGATE — 集約関数の定義の削除 ●DROP DATABASE — 既存のデータベースの削除 ●DROP FUNCTION — ユーザ定義のC関数の削除 ●DROP GROUP — グループの削除 ●DROP INDEX — データベースからインデックスの削除 ●DROP LANGUAGE — ユーザ定義の手続き言語の削除 ●DROP OPERATOR — データベースから演算子の削除 ●DROP RULE — データベースから既存のルールの削除 ●DROP SEQUENCE — 既存のシーケンスの削除 ●DROP TABLE — データベースから既存のテーブルの削除 ●DROP TRIGGER — トリガの定義の削除 ●DROP TYPE — システムカタログからユーザ定義のデータ型の削除 ●DROP USER — ユーザの削除 ●DROP VIEW — 既存のビューをデータベースから削除 ●END — 現在のトランザクションのコミット ●EXPLAIN — 問い合わせ文の実行計画の表示 ●FETCH — カーソルを使っての行の取得 FETCH [ direction ] [ count ] { IN | FROM } cursor FETCH [ FORWARD | BACKWARD | RELATIVE ] [ # | ALL | NEXT | PRIOR ] { IN | FROM } cursor ●GRANT — ユーザ、グループあるいはすべてのユーザへのアクセス権限の付与 GRANT privilege [, ...] ON object [, ...] TO { PUBLIC | GROUP group | username } ●INSERT — テーブルに新しい行の挿入 INSERT INTO table [ ( column [, ...] ) ] { DEFAULT VALUES | VALUES ( expression [, ...] ) | SELECT query } ●LISTEN — 通知条件についての応答の監視 ●LOAD — 動的なオブジェクトファイルの読み込み ●LOCK — トランザクション内部でのテーブルの明示的なロック ●MOVE — カーソルの位置の移動 MOVE [ direction ] [ count ] { IN | FROM } cursor ●NOTIFY — ある通知条件を監視する全てのフロントエンド、バックエンドへの信号の送信 ●REINDEX — スタンドアロン状態のPostgresにおいて、破損したシステムインデックスの修復 ●RESET — 実行時パラメータのデフォルト値への格納 RESET variable ●REVOKE — ユーザ、グループ、もしくは、全てのユーザからアクセス権限の取り上げ ●ROLLBACK — 現在のトランザクションのアボート ●SELECT — テーブルかビューからの行の検索 SELECT [ ALL | DISTINCT [ ON ( expression [, ...] ) ] ] * | expression [ AS output_name ] [, ...] [ FROM from_item [, ...] ] [ WHERE condition ] [ GROUP BY expression [, ...] ] [ HAVING condition [, ...] ] [ { UNION | INTERSECT | EXCEPT [ ALL ] } select ] [ ORDER BY expression [ ASC | DESC | USING operator ] [, ...] ] [ FOR UPDATE [ OF tablename [, ...] ] ] [ LIMIT { count | ALL } [ { OFFSET | , } start ]] where from_item can be: [ ONLY ] table_name [ * ] [ [ AS ] alias [ ( column_alias_list ) ] ] | ( select ) [ AS ] alias [ ( column_alias_list ) ] | from_item [ NATURAL ] join_type from_item [ ON join_condition | USING ( join_column_list ) ] ●SELECT INTO — SELECT の結果からの新しいテーブルの作成 SELECT [ ALL | DISTINCT [ ON ( expression [, ...] ) ] ] * | expression [ AS output_name ] [, ...] INTO [ TEMPORARY | TEMP ] [ TABLE ] new_table [ FROM from_item [, ...] ] [ WHERE condition ] [ GROUP BY expression [, ...] ] [ HAVING condition [, ...] ] [ { UNION | INTERSECT | EXCEPT [ ALL ] } select ] [ ORDER BY expression [ ASC | DESC | USING operator ] [, ...] ] [ FOR UPDATE [ OF tablename [, ...] ] ] [ LIMIT { count | ALL } [ { OFFSET | , } start ]] where from_item can be: [ ONLY ] table_name [ * ] [ [ AS ] alias [ ( column_alias_list ) ] ] | ( select ) [ AS ] alias [ ( column_alias_list ) ] | from_item [ NATURAL ] join_type from_item [ ON join_condition | USING ( join_column_list ) ] ●SET — 実行時パラメータの設定 ●SET CONSTRAINTS — 現在のSQLトランザクションの制約モードを設定 ●SET TRANSACTION — 現在の SQL-トランザクションの特質の設定 ●SHOW — 実行時パラメータの表示 ●TRUNCATE — テーブルの空化 ●UNLISTEN — 通知の監視の停止 ●UPDATE — テーブル内のカラムの値の置き換え UPDATE [ ONLY ] table SET col = expression [, ...] [ FROM fromlist ] [ WHERE condition ] ●VACUUM — Postgresデータベースの掃除と解析 ■PostgreSQL クライアントアプリケーション ●createdb — Postgres データベースの新規作成 ●createuser — 新しい Postgres ユーザの作成 ●dropdb —既存の Postgres データベースの削除 ●dropuser —Postgresユーザの削除 ●ecpg — 埋め込みSQL用Cプリプロセッサ ●pgaccess — PostgreSQLグラフィカルクライアント ●pgadmin — Windows 95/98/NT用Postgres データベース管理・設計ツール ●pg_config — インストールしたPostgreSQLバージョンの情報の提供 ●pg_dump — Postgres データベースのスクリプトファイルから他のアーカイブファイルへの抽出 ●pg_dumpall — スクリプトファイルへのすべてのデータベースの抽出 ●pg_restore — Postgres データベースのpg_dumpが作ったアーカイブファイルへのリストア ●psql — Postgres対話的ターミナル ●pgtclsh — PostgreSQL Tcl shell クライアント ●pgtksh — PostgreSQL Tcl/Tk shell クライアント ●vacuumdb — Postgresデータベースの不要領域の掃除と解析
●主な使い方 ●テーブル定義 1.データベースの作成 $ createdb testdb CREATE DATABASE SQL文の場合、 CREATE DATABASE <データベース名> [ WITH LOCATION = '<配置>' ] [ ENCODING = '<エンコーディング名>' ] 2.テーブルの作成 $ psql testdb testdb=# CREATE TABLE testtab ( testdb(# id INT, testdb(# name VARCHAR(255), マニュアル〜ニュース[2003.3.7] 1) 手作業整形: 日付★タイトル★予備 2) Script処理: a)URL切り離し 3) DB収納形式: [ID][出典名][発行日][タイトル][分類][URL][要約][本文][備考][会社名][製品名] * 個別記事レコードとは別に、出典に関するレコードあり * 出典:同じ会社でも Bayer financial News, Bayer Press release 更に、本社、米国支社、などあるので区別が必要 4) DB内処理 : 日付形式統一 newsdb=# create table newsdb ( id char(10) not null, source text(10), date text(16), title text(20), category text(10), url text(30), summary text(10), contents text(100), note text(10), cmpany text(10), product text(10)); int 整数型 float 小数点浮動型 text 可変長テキスト型 varchar 字数制限付き可変長テキスト型 date 日付型 time 時刻型 datetime 日付時刻型 serial 番号自動入力 ★データベースにアクセス psql newsdb ●データ入力・変更・削除・出力 ※挿入(1) ※挿入(2) 書式 INSERT INTO テーブル名 (フィールド名, フィールド名, …) VALUES (値, 値, …); 書式 INSERT INTO テーブル名 VALUES (値, 値, …); ※変更 書式 UPDATE テーブル名 SET フィールド名 = 値 WHERE 条件; ※削除 書式 DELETE FROM テーブル名 WHERE 条件; ●データ検索と表示 書式 SELECT フィールド名 from テーブル名; 書式 SELECT * from テーブル名; ●データWEB検索と表示 参考●SAK図書館:PostgreSQL + PHP アクセス 以下の例のようにHTML内にPHP Scriptを書く。 // PostgreSQL Connect if (!($cn = pg_connect("host=sak-design port=5432 dbname=sak user=sak password=sak"))) { die; } // PostgreSQL Select $sql = "select * from testm"; if (!($rs = pg_exec($sql))) { die; } // PostgreSQL Get Records $ct = pg_numrows($rs); for ($i = 0; $i < $ct; $i++) { $item = pg_fetch_array($rs, $i); print "${item[0]} "; print "${item[1]} "; print "${item['・ヌ。シ・ソ2']} "; print "${item['・ヌ。シ・ソ3']}
"; } // PostgreSQL Disconnect pg_close($cn);
●参考資料 インストールと設定には、それぞれの関連資料欄をリストアップしてある。 以下の資料は、公式マニュアルと違うが、概要を把握し、実際にやってみる際に 役立つもの。 PHP と PostgreSQL で Web アプリケーションを! PostgreSQLしてみよう ---http://itnavi.com/PGSQLsiyou.htm :PostgreSQLのインストール方法から運用方法まで詳しく解説 RADKRAFT: MySQL Linuxサーバーの実験 - Apache+PHP4+PostgreSQL/MySQLのインストール 庭内ネットワークによるコミュニケーション/情報共有システム作り ---postgreSQLとMySQLの両方を共存できる方法
■PostgreSQLのインストールと設定
●概要 ●PostgreSQLしてみようを参考に。 1.postgresユーザを追加する useradd postgres 2.インストールディレクトリを作成する postgresユーザが書き込めるように設定する。 # mkdir /usr/local/src/postgresql-7.0/ # chown postgres:postgres /usr/local/src/postgresql-7.0/ # mkdir /usr/local/pgsql # chown postgres:postgres /usr/local/pgsql 2.プロファイルの設定 ~postgres/.bash_profile PATH="$PATH":/usr/local/pgsql/bin PG=/usr/local/pgsql export PGLIB=$PG/lib export PGDATA=$PG/data export LD_LIBRARY_PATH="$LD_LIBRARY_PATH":$PGLIB [.bashrc] PG=/usr/local/pgsql export PATH="$PATH":$PG/bin export PGLIB=$PG/lib export LD_LIBRARY_PATH="$LD_LIBRARY_PATH":"$PGLIB" export PGDATA=$PG/data export MANPATH="$MANPATH":$PG/man export PGDATESTYLE=iso [.tcshrc] set pg=/usr/local/pgsql if ($?PATH) then setenv PATH "$PATH":$pg/bin else setenv PATH /bin:/usr/bin:/usr/local/bin:$pg/bin endif setenv PGLIB "$pg"/lib if ($?LD_LIBRARY_PATH) then setenv LD_LIBRARY_PATH "$LD_LIBRARY_PATH":"$PGLIB" else setenv LD_LIBRARY_PATH "$PGLIB" endif setenv PGDATA $pg/data setenv PGDATESTYLE iso if ($?MANPATH) then setenv MANPATH "$MANPATH":$pg/man else setenv MANPATH /usr/man:/usr/local/man:$pg/man endif 3.インストール ※initdbはrootで実行しない。 # su - postgres $ cd /home/postgres/ $ tar xfz postgresql-7.0.2.tar.gz $ cd postgresql-7.0.2/src $ ./configure --enable-multibyte=EUC_JP $ make all $ make install
●インストールの実際 ★実際にやってみた [ft:/usr/local/src/php/php-4.2.2]# rpm -qa|grep postgres [ft:/usr/local/src/php/php-4.2.2]# su - postgres * su - 権限からの切り換え必要 でないとpassword要求される bash$ cd /usr/local/src/postgresql ★bash$ tar xfz postgresql-7.2.3.tar.gz bash$ cd /usr/local/src/postgresql/postgresql-7.2.3 bash$ ./configure --enable-multibyte=EUC_JP --enable-syslog (略) bash: make (略) bash: make install (略) Thank you for choosing PostgreSQL, the most advanced open source database engine. ★後処理 [ft:~]# cd /usr/local/src/tcl [ft:/usr/local/src/tcl]# rpm -Uvh tcl-8.0.5-35j2.i386.rpm tcl ################################################## [ft:/usr/local/src/tcl]# rpm -Uvh tclx-8.0.5-35j2.i386.rpm エラー: 依存性の欠如: libtk8.0.soは tclx-8.0.5-35j2 に必要とされています libtk8.0jp.soは tclx-8.0.5-35j2 に必要とされています ※tk インストールもれ [ft:/usr/local/src/tcl]# cp /home/httpd/html/tk*.* /usr/local/src/tcl/ [ft:/usr/local/src/tcl]# rpm -Uvh tk-8.0.5-35j2.i386.rpm tk ################################################## [ft:/usr/local/src/tcl]# rpm -Uvh tclx-8.0.5-35j2.i386.rpm tclx [ft:/usr/local/src/php/php-4.2.2]# su - postgres bash$ cd /usr/local/src/postgresql/postgresql-7.2.3 bash$ ./configure --enable-multibyte=EUC_JP --enable-syslog --tcl (略) bash: make (略) bash: make install (略) [ft:] cd /usr/bin [ft:] ln -s /usr/bin/wish8.0jp /usr/bin/wish ln: /usr/bin/wish: すでにファイルが存在します [ft:]# su - postgres ★bash$ cd /usr/local/src/postgresql/postgresql-7.2.3 ★bash$ ./configure --enable-multibyte=EUC_JP --enable-syslog --with-tcl
--with-tclconfig=/usr/lib/tcl8.0jp --with-tkconfig=/usr/lib/tk8.0jp
--with-includes="/usr/include/tcl/8.0jp /usr/include/tk8.0jp" (略) checking for POSIX signal interface... (cached) yes checking for tclsh... (cached) /usr/bin/tclsh checking for tclConfig.sh... no configure: error: file `tclConfig.sh' is required for Tcl bash$ ★bash: make (略) ★bash: make install (略) ★[ft:/usr/local/src/php]# useradd postgres ★[ft:/usr/local/src/php]# chown postgres:postgres /usr/local/src/postgresql/ ★[ft:/usr/local/src/php]# chown postgres:postgres /usr/local/pgsql [ft:/usr/local/src/php]# cd /home/httpd/html ★[ft:/home/httpd/html]# cp t.t /home/postgres/.bash_profile cp: `/home/postgres/.bash_profile' を上書きしてもよろしいですか (yes/no)? y [ft:/home/httpd/html]# cd /usr/local/src ★[ft:/usr/local/src]# chmod 777 /usr/local/src ★[ft:/usr/local/src]# chmod 777 /usr/local/src/php ★[ft:/usr/local/src]# chmod 777 /usr/local/src/postgresql [ft:/usr/local/src]# rpm -e postgresql-devel エラー: パッケージ postgresql-devel はインストールされていません [ft:/usr/local/src]# rpm -e postgresql-server エラー: パッケージ postgresql-server はインストールされていません [ft:/usr/local/src]# rpm -e postgresql エラー: パッケージ postgresql はインストールされていません ★[ft:~]# su - postgres ★bash$ initdb The files belonging to this database system will be owned by user "postgres". This user must also own the server process. creating directory /usr/local/pgsql/data... ok creating directory /usr/local/pgsql/data/base... ok creating directory /usr/local/pgsql/data/global... ok creating directory /usr/local/pgsql/data/pg_xlog... ok creating directory /usr/local/pgsql/data/pg_clog... ok creating template1 database in /usr/local/pgsql/data/base/1... ok creating configuration files... ok initializing pg_shadow... ok enabling unlimited row size for system tables... ok creating system views... ok loading pg_description... ok vacuuming database template1... ok copying template1 to template0... ok Success. You can now start the database server using: /usr/local/pgsql/bin/postmaster -D /usr/local/pgsql/data or /usr/local/pgsql/bin/pg_ctl -D /usr/local/pgsql/data -l logfile start ★bash$ pg_ctl -w start waiting for postmaster to start...DEBUG: database system was shut down at 2003- 04-01 11:29:57 JST DEBUG: checkpoint record is at 0/109664 DEBUG: redo record is at 0/109664; undo record is at 0/0; shutdown TRUE DEBUG: next transaction id: 89; next oid: 16556 FATAL 1: The database system is starting up .DEBUG: database system is ready done postmaster successfully started ★bash$ chmod u+w /usr/local/pgsql/data/pg_hba.conf ★bash$ pg_ctl restart DEBUG: smart shutdown request DEBUG: shutting down waiting for postmaster to shut down......DEBUG: database system is shut down done postmaster successfully shut down postmaster successfully started bash$ DEBUG: database system was shut down at 2003-04-01 11:52:53 JST DEBUG: checkpoint record is at 0/1096A4 DEBUG: redo record is at 0/1096A4; undo record is at 0/0; shutdown TRUE DEBUG: next transaction id: 92; next oid: 16556 DEBUG: database system is ready ★createdb testdb CREATE DATABASE ★bash$ psql testdb Welcome to psql, the PostgreSQL interactive terminal. Type: \copyright for distribution terms \h for help with SQL commands \? for help on internal slash commands \g or terminate with semicolon to execute query \q to quit ★testdb=# create table news ( id char(10) not null, source varchar(10), date varc har(16), title varchar(20), category varchar(10), url varchar(30), summary varch ar(10), contents varchar(100), note varchar(10), cmpany varchar(10), product var char(10)); CREATE testdb=# [ft:/home/postgres]# find /home -name "testdb*" -ls [ft:/home/postgres]# find /usr -name "testdb*" -ls
●TCK/TK PostgreSQL+PHPシステム構築の参考書のメイン・サンプルがTCK/TKを必要としたので やむなくインストールした。 ●RPM tcl-8.0.4jp-1jrpm tclx-8.0.4jp-1jrpm tk-8.0.4jp-1jrpm ●tcl-8.0.5-1 RPM for sh4 Files /usr/include/tcl.h /usr/lib/libtcl.so /usr/lib/libtcl8.0.so /usr/lib/libtcl8.0jp.so /usr/lib/tcl8.0jp /usr/lib/tcl8.0jp/history.tcl /usr/lib/tcl8.0jp/http1.0 /usr/lib/tcl8.0jp/http1.0/http.tcl /usr/lib/tcl8.0jp/http1.0/pkgIndex.tcl /usr/lib/tcl8.0jp/http2.0 /usr/lib/tcl8.0jp/http2.0/http.tcl /usr/lib/tcl8.0jp/http2.0/pkgIndex.tcl /usr/lib/tcl8.0jp/init.tcl /usr/lib/tcl8.0jp/ldAix /usr/lib/tcl8.0jp/ldAout.tcl /usr/lib/tcl8.0jp/opt0.1 /usr/lib/tcl8.0jp/opt0.1/optparse.tcl /usr/lib/tcl8.0jp/opt0.1/pkgIndex.tcl /usr/lib/tcl8.0jp/parray.tcl /usr/lib/tcl8.0jp/safe.tcl /usr/lib/tcl8.0jp/tclAppInit.c /usr/lib/tcl8.0jp/tclIndex /usr/lib/tcl8.0jp/word.tcl /usr/lib/tclConfig.sh ●参考資料 Tcl/Tk8.0.5 のインストール
●PHP
■PHP関連リソース
PHP(正式名称 PHP:Hypertext Preprocessor) WWWに特化し、CGI・Apacheのモジュールとして利用できるスクリプト言語。 Personal Home Page tools MySQL/mSQL/PostgreSQL/Sybase等と組み合わせる事ができる。 ●種類 PHP4 最新版4.1.2 (Script engine "Zend"搭載 ) PHP3 最新版3.0.15 註)PHP/FI2はPHP3に移行、 ●関連ディレクトリ[] 初期ディレクトリ/usr/local/apache ソースファイル /usr/local/src or /usr/src/pgsql /usr/src/php/ インストール先 /usr/local/pgsql /usr/local/lib/php 設定ファイル /usr/local/lib/php3.ini マニュアル /usr/local/pgsql/man 起動 /etc/rc.d/init.d/postgres start ●関連ディレクトリ[RPM] 初期ディレクトリ/usr/lib/apache ソースファイル インストール先 設定ファイル /etc/httpd/php3.ini /var/lib/pgsql/data/pg_hba.conf アクセス許可 ★ApacheにPHPが組み込まれているかテストする HTMLドキュメント /usr/local/apache/htdocs/ or に以下の内容でphpinfo.phpというファイルを作成して、ブラウザからアクセスしてみてください。 phpinfo(); ?> PHPのデータが沢山でてきたら成功です! コバルトTIPS:コバルトRaQ4でPHP経由でPostgreSQLデータベースにアクセスする
●会社・団体 ●日本PHPユーザ会 -http://www.php.gr.jp/ ---HOME -/What's New /PHPについて /セミナー ---PHP関連情報 - PHP/FI2 /PHP3 /PHP4 /PHPlib /PHP関連リンク集 ---プロジェクト ---PHP国際化/マニュアル /ML ---検索 : ML /旧ML過去ログ(2001/6まで) /マニュアル ---ダウンロード :PHP(本家) /国際化版PHP
●マニュアル類 ●PHP マニュアル http://www.php.net/manual/ja/ ---PHP の日本語マニュアル ●http://php.lamphost.net/ - PHP マニュアル
●一般 ●PHP 日本語ページ -http://www.geocities.jp/rui_hirokawa/php/index.html ---PHP の紹介や最新ニュース、リンク集 PHP4徹底攻略 実戦編[ソフトバンクパブリッシング]等の著者、広川類氏のページ ●IT Boost: PHP4.12 - http://itb-tech.itboost.co.jp/inst/inst_48.php - IT Boost:PostgreSQL のインストール & 設定 - IT Boost:MySQL 導入/運用 ●PHPLIB チュートリアル http://isweb13.infoseek.co.jp/computer/yabiku/phplibTop.html ---PHPLIB のインストール方法やセッション管理について解説 ●PHP Dream http://www.dcl.info.waseda.ac.jp/~hasegawa/php/ ---インストール方法やプログラミングの解説。 ●レッツPHP http://php.s3.to/ ---掲示板やチャット等のスクリプトを配布。チュートリアルや PHP が使える無料サーバ情報もある ●PHP 研究室 http://tech.millto.net/~maacyan/ ---インストール方法や各種ツールの紹介 ●PHPの小部屋 --- http://www.komonet.ne.jp/~php/ ; 解説とスクリプト提供 PHP4で作るWeb-DBシステム:全5回 --- http://www.atmarkit.co.jp/flinux/index/indexfiles/phpindex.html
●解説 ●PHPサンプルソース解説 - 要領よく、理解を助けてくれる
●ニュース・総説 ●PHPプログラマーズマガジン[月刊pdf] -http://www.asial.co.jp/magazine/; メルマガは無料
●リンク集 PHP 関連リンク集 ---活用事例、サポートDB、書籍など Google:PHP http://php.lamphost.net/sites.php AllAboutJapan:データベース - AllAboutJapan:Apache + PHP + MySQL編 記事一覧 - AllAboutJapan:PHPとDBの連携
●書籍 Amazon.co.jp: php4関連書籍[11冊] Amazon.co.jp: プログラミング>php関連書籍[23冊] 広川類著「PHP4徹底攻略」[ソフトバンクパブリッシング] - 改訂版 発売日:2002/10/02 本体価格: \3,800 B5変 532p w/CD-ROM※[マンモス本] - 実戦編 発売日:2002/04/01 本体価格: \3,800 B5変 504p w/CD-ROM Softbank Handbook シリーズ「PHPハンドブック」[ソフトバンクパブリッシング] - 2002.7.1; \2,600; その関数をオールサンプル付きで解説した言語リファレンス PHP ポケットリファレンス[技術評論社] - 大垣靖男 著 (2003年2月7日発売)、価格2180円+税 PHP4逆引き大全 500の極意 - 高島 優作 (著) 単行本 (2002/07) 秀和システム ; \2,600 ISBNコード: 4-7980-0352-2 ; A5判784p ; CD-ROM: Win/Linux/UNIX対応 ●サンプル集 西沢直木 著「PHPによる Webアプリケーション スーパーサンプル」[ソフトバンクパブリッシング] - 2002.10.2 \3,600 B5変700P ; CD-ROM付き、スクリプト300本実用サンプル 付録CD-ROMにはPHP、MySQL、PostgreSQLを収録。Windows/Linux対応。 [アクセスログ解析][アンケート][オンラインリンク][タイムカード] [予約システム][ショッピングカート][オンライン広告] 著者 西沢直木氏のページhttp://www.nishi2002.com/、本書サンプル http://asp.dataweb.ne.jp/ そのまま使える PHPサンプル100選[技術評論社] - 緒方 弘幸+下岡 秀幸+西村 方孝+宮本 聡 共著 (2002年9月18日発売)、価格2580円+税 B5判264P; W/CD-ROM [チャット][掲示板][URL自動リンク][マルチカウンタ][Basic認証] 今日からつかえるPHP4サンプル集 - http://member.nifty.ne.jp/Y-Yamada/php/ 山田祥寛/著 株式会社 秀和システム/発行; 発行:2002年1月30日 定価2,800円+税 B5変版・500ページ・2色 ISBN 4-7980-0247-X [グループスケジュール管理][電子商店街][検索エンジン〜概要][資産管理システム] [スレッド式掲示板] -
●PHP-DB利用ページ 薬のガイド データベース -http://www.nihs.go.jp/tipdb/ - 技術評論社
■PHP WEBアプリ&ツール
●PHP関連ツール Linux Software Search :PHP --- 約100件が登録 CGI KON - http://cgikon.com/; 〜 フリー・シェアウェア CGI提供サイト〜 --------------------------------------------------- Webサーバ用 PHPスクリプト(PostgreSQL処理) ---PHPスクリプトでpostgreSQLを処理する汎用データ・コンポーネント。Webブラウザか ら任意のPostgreSQLのテーブルを呼び出して実行できます。(Free) Data Explorer for SQL ---Webベースのデータベースアクセスツール。Linux/UNIX+ApacheのPHP3及びPHP4(英語 版でもOK)、Windows+Apache/IISのPHP3及びPHP4(英語版でもOK)で使えます。OracleとPo stgresに対応。(Free) by PHP研究室 phpMyAdmin 日本語版 ---phpMyAdminは、WebブラウザからMySQLデータベースを管理するためのソフトウェアです。(Free) by trustBee IMP日本語版 ---IMPは、PHPで作成されたフリーのWebメーラです。IMAPを使用したメールサーバと組 み合わせることで、Webメールシステムを構築できます。また、PostgreSQLやMySQLなど のデータベースと連携させると、アドレス帳や署名が使えるようになります。(Free) by trustBee Docsdepo - PHP による文書格納サービス - Docsdepo は、PHP による文書格納サービス(document depository)です。ユーザ間 で、文書ファイルのアップロード、ダウンロードを可能にします。ファイルはサーバのフ ァイルシステム上に、文書情報はデータベースに保存します。 動作環境は RedHat Linux 6.1、Webサーバは Apache 3.1.9、データベースはPostgreSQL 6.5.2 を使用しました。 Apache に PHP 3.0.12 モジュールを組み込んだ環境で動作。 by 横浜工文社
●便利ツール ●asp2php --- ASP(Microsoft IIS用サーバサイドスクリプト)をphp(Apache用サーバサイドスクリ プト)に変換するソフト ●mysqlphp2postgres --- MySQL用プログラムをPostgreSQL用プログラムに置きかえるツール。PHP用 ● ---
●データベース ●CSLWEBFORM --- 汎用DB検索更新ツール。 PostgreSQLのデータの閲覧・更新がWebベースで行える。Apach + PHP3 + PostgreSQLで構成されている。 ●CSL_WEB_FORM --- PHP3 + PostgreSQL 汎用DB検索更新ツール ●CGI KON - http://cgikon.com/; 〜 フリー・シェアウェア CGI提供サイト〜 FAQ登録・検索・閲覧、お問合せ登録・検索・閲覧、会員登録・検索・閲覧、 日記登録・閲覧、リンク集登録・検索・閲覧、 ●Vector -UNIX - ビジネス - データベース ★[Free]公開日:03.01.24
PostgreStudio UNIX用 2.0 - PostgreSQL を Web ブラウザから簡単に操作できる Web アプリケーション(SQL入力 不要!!) (461K) by 関 愛 サーバ側に PostgreSQL, Java2sdk, Tomcat などの環境が必要。 データ検索/Export&Import/データ追加変更削除・一覧表示 ★[Free]公開日:02.11.08
SQL Engine 1.71 - CSV ファイルに対して SQL を発行する CGI 用 Perl モジュール (49K) ★[sample]公開日:02.11.01
Applied DD for Solaris 2.08 - 表データのCSVファイル出力とSQL*Loader用制御ファイル自動生成 (133K) ★[Free]公開日:02.03.26
dbExpert 207 - データベース統合アクセスツール (103K) あまり似たものが無いので説明しにくいですが、本格的なRDBMS(Oracle、Postgres)に手 軽にアクセスするためのツール(PHPのスクリプト)です。以下の機能を統合し、ブラウザ からRDBMSに簡単かつプロユースに耐える精緻な機能でアクセスできます。 ・データのインポート/エクスポート ・選択した表のデータを3段階にエスカレーション表示 ・検索/絞込み(新しいアイデアによるクエリー) ・追加/変更/削除(自動的に排他制御) ・SQL文(バッチファイル)の連続実行と結果の表示 ・表、ビュー等の一覧と定義の表示 ・システム・カタログの表示 (とメンテナンス) 以上の機能を圧縮して100KB強で実現しています。 以下のホームページで実際の動作が確認可能できます。 http://haitaka.com/phpinfo/dbexpert.html ★[Free]公開日:02.03.12
MySQLデータベース処理用の汎用PHPスクリプト 3.0 - MySQLデータベースに対して、任意SQL文を実行できるWEBツール (8K) ★[Share][Proreg](1,000円) 公開日:02.02.01
データレプリケートコマンド for HP-UX 01.00.01 - データベースのデータを、ダウンロード/アップロードするコマンド (415K) ★[Free]公開日:97.12.18
SGMLPDB 2.0 - SGMLで作るカード型データベース (334K) Automating news display with PHP scripts - PHP +MySQL
●アンケート ●phpESP --- ウェブでのアンケート調査の作成、集計、管理をメニュー形式で実現するソフトウェア。 ●CGI KON - http://cgikon.com/; 〜 フリー・シェアウェア CGI提供サイト〜 アンケート閲覧(一覧表示)(グラフ表示)(件数表示)(割合表示) アンケート作成・収集 質問作成(採点式)(○×式)
●PHPサンプル Do You PHP? -サンプル - 基礎的サンプル PHP PostgrSQL MySQLサンプルスクリプト - 基礎的サンプル PHPフリースクリプトコーナー - http://act.noomise.com/php/script.html; 実用的なものも各種収録 PHPの実用的なサンプル集 - 基礎的サンプル PHPハンドブック/サンプルスクリプト[秀和システム] - 本丸ごとをサンプル化;『図解・標準 最新PHPハンドブック』 第9章 スクリプトサンプル:アクセスカウンタの作成 第10章 スクリプトサンプル:掲示板の作成 第11章 スクリプトサンプル:PostgreSQLを利用したWebDBシステム http://aki.adam.ne.jp/ - ;掲示板、カウンター、WEB日記、リンク集など www.phpbuilder.com : PHP Library - http://www.phpbuilder.com/snippet/; 約800 http://www.hotscripts.com/PHP/Scripts_and_Programs/ - PHP Script集。 分類別 - News Publishing[192] - 大半がMySQL+PHP - anarchy - ニュースDB管理;Free; PHP/MySQL or PostgreSQL Destinyd News - ニュースDB管理;Free; PHP/MySQL or PostgreSQL - -
●その他 Bitlink ---MySQL+PHP等によるWEBショップシステム、DB型ホームページ自動生成、予約システムなどデモ Q & A掲示板(PHP+PostgreSQL版
■PHP実習
●参考 データベースアプリケーションの作成 後編 連載:PHP4で作るWeb-DBシステム(5) 前回作り始めたアプリを完成させる。Oracleや PostgreSQLからデータを取得して加工する方法や、エラー処理のタイミングなども解説 「Linux Square」フォーラム 2000/11/28
●データの取得 データによって動的に変化する画面には、データを取り出すプログラムが必要です。今回の場合は全画面で必要になります。ここでは、一番最初に使われる社員検索画面(emp_menu.php)の部署選択一覧を例に説明します。具体的には、部署(Dept)表の部署名称をデータベースから取り出し、その内容をHTMLにあてはめる処理を作成します。
psqlが起動したら、のように特定の表に関する権限を付与。この例では、emp表への全操作権限をnobodyユーザーに付与。
grant select, insert, update, delete on emp to nobody;
PostgreSQLの場合はユーザーを指定していませんが、新しく追加したApacheのプロセスオーナー(通常nobody)に、データの操作権限を与えておく必要があります。操作権限を与えるには、PostgreSQLのオーナーでLinuxにログインし、psqlを対象となるデータベースを指定して起動します。●PGの実行 pg_Exec関数
本題のデータ取得についてですが、PostgreSQLの場合は、Oracleと違ってselect文を解析する(Parseする)必要がなく、いきなりSQLを実行する命令、pg_Exec関数から手順を始める。この関数を実行すると、問い合わせの結果セットが作られ、その検索結果を指定するためのIDが返されます。
$result = pg_Exec($conn, "select deptno, dname from dept");
if ($result) {
do {
@$row = pg_Fetch_Row ($result, $i);
if ($row) {
print('<OPTION VALUE="'. $row[0]. '">'. $row[1]. '</OPTION>'. "\n")
$i++;
}
} while ($row);
}●1行のデータを取り出す命令がpg_Fetch_Row関数
PostgreSQLの結果セットから、1行のデータを取り出す命令がpg_Fetch_Row関数。この関数でデータを取り出す際には、取り出そうとする行番号を指定する必要があります。上例では、「$result」という結果セットの1行目のデータを取り出す。
$row = pg_Fetch_Row($result, 0);pg_Fetch_Row関数を実行すると、指定した配列(この場合は$row)に取り出したデータが格納されます。この配列は、取り出した行に含まれる列数分の要素を持っていて、select文で指定した順に格納されています。今回の例では「Select deptno, dname from dept」としていますから、$row[0]にはdeptno列の値が格納されるわけです。
●検索画面を表示 入力した条件を受け取って検索するのは、検索結果画面(emp_query.php)の役割です。この画面でも先ほどと同様にデータを取得するのですが、入力された条件を受け取るところでテクニックが必要
まずは、検索条件を無視して社員の一覧を作成できるようにします(PostgreSQL用:リスト6)。
これまではselect文を直接関数に渡していましたが、今回は変数に格納してから関数に渡すようにします。そうすることで、変数に格納されたselect文に対して文字列連結が行えるようになります。リスト8は完成したプログラムですが、if文の中で文字列連結を使っていることが分かります。
$sql = "select e.empno, e.ename, d.dname from emp e, dept d where e.deptno = d.deptno";
if (!empty($inp_empno)) {
$sql = $sql. " and e.empno = ". $inp_empno;
}このとき、if文の条件は検索条件の入力があるかどうかです。この判定にはempty関数が便利です。empty関数は、変数に値があるかないかを判断し、値がなければTRUEを返します。従って、値があることを確認したければ、それを否定して「!empty」とすればいいのです。
こうして条件を判断してselect文を組み立てることができれば、あとは普通にデータを取得するだけです。データの取得法さえ分かってしまえば、いくらでも応用することが可能です。その応用が難しいのかもしれませんが、PHPでデータベースと連携することが、いかに簡単かお分かりいただけると思います。
if (!empty($inp_dept) and ($inp_dept != "NULL"))これで検索結果を表示する画面は完成ですが、条件に一致する結果がなかった場合のルーチンも作っておくと、より本格的なアプリケーションらしくなります。このルーチンについては紹介しませんから、皆さんなりに考えてみてください。ポイントは、一致する結果がなかった場合は一覧表の枠や列ヘッダを作らないことです。
●データの操作
更新画面(emp_update.php)作る必要があります。emp_update.phpにはinp_empnoという変数に社員番号が渡されますから、これを使って社員のデータを表示してやります。削除画面となるemp_del.phpの方も、同様に社員名を表示するようにしてやれば、残るは操作結果画面(emp_commit.php)を作るだけです。
ところが、この画面ではすべてのデータ操作を引き受けます。従って、このプログラム1つで追加・更新・削除ができなければならないのです。
非常に難しい問題のようですが、この答えは意外に簡単です。実は、こうした問題が発生することを予測し、追加・更新・削除画面のボタンの文字(ラベル)を変えてあるのです。つまり、押したボタンの文字を判別することで、どの操作をすべきか判断できるということです。
ボタンの文字は、それぞれ「登録完了」(追加)・「更新完了」(更新)・「確認」(削除)となっていますから、これを判断します。これが、もし「OK」や「変更」などというありがちな文字で統一されていたら、呼び出し元のプログラム名で判断するなど、ややこしい手段を使うはめになってしまいます。それに比べて、ボタンの文字で判断する方法は簡単で確実ですからお勧めです。
ボタンの文字は、inp_submitという名称の変数に格納され、プログラム側で呼び出せるようになっています。データ操作を行うときに、inp_submit変数の内容をif文で判断し、先ほどの文字列と比較してください。そして、各操作で必要な変数(入力値)を読み取り、SQLを組み立ててやるのです。
あとは、そのSQLを実行するだけです。SQLを実行する方法は、検索ルーチンとまったく同様で、その後にデータを取り出さないところが違うだけです。その代わりに、データ操作ではコミット(確定)かロールバック(取り消し)を行わなければなりません。これだけでデータ操作プログラムは完成しますから、検索画面を作ることができれば難しくないはずです。
●画面1のHTMLファイル[emp_menu.php]検索条件入力画面
<HTML>
<HEAD>
<TITLE>社員検索条件入力画面</TITLE>
</HEAD>
<BODY>
<CENTER>
<TABLE><TR>
<TD ALIGN="center" COLSPAN="2"><HR WIDTH="400"></TD>
</TR><TR>
<TD ALIGN="center" COLSPAN="2"><H1>検索条件入力画面</H1></TD>
</TR><TR>
<TD ALIGN="center" COLSPAN="2">社員情報のメンテナンスを行えます。</TD>
</TR><TR>
<TD ALIGN="center" COLSPAN="2">検索条件を入力して検索してください。</TD>
</TR><TR>
<TD ALIGN="center" COLSPAN="2">氏名だけは部分一致検索を行います。</TD>
</TR><TR>
<TD ALIGN="center" COLSPAN="2"><HR WIDTH="400"></TD>
</TR><TR>
<FORM ACTION="" METHOD="post">
<TD ALIGN="right">部門名称:</TD><TD>
<SELECT NAME="">
<OPTION SELECTED VALUE="NULL">指定なし</OPTION>
<OPTION VALUE="10">SALES</OPTION>
<OPTION VALUE="20">ENGINEER</OPTION>
</SELECT>
</TD>
</TR><TR>
<TD ALIGN="right">社員番号:</TD><TD><INPUT TYPE="text" NAME=""></TD>
</TR><TR>
<TD ALIGN="right">社員氏名:</TD><TD><INPUT TYPE="text" NAME=""></TD>
</TR><TR></TR><TR>
<TD COLSPAN="2" ALIGN="center"><INPUT TYPE="submit" NAME="" VALUE="検索実行">
<INPUT TYPE="reset" VALUE="条件削除"></TD>
</TR><TR>
</FORM>
<TD ALIGN="center" COLSPAN="2"><HR WIDTH="400"></TD>
</TR><TR>
<TD ALIGN="center" COLSPAN="2">新しく社員を追加する場合は、新規追加ボタンを押してください。</TD>
</TR><TR>
<FORM ACTION="" METHOD="post">
<TD ALIGN="center" COLSPAN="2"><INPUT TYPE="submit" NAME="" VALUE="新規追加"></TD>
</FORM>
</TR><TR>
<TD ALIGN="center" COLSPAN="2"><HR WIDTH="400"></TD>
</TR><TR>
<TD ALIGN="right" COLSPAN="2">Copyright 2000, Tatsuya Ichishi</TD>
</TR></TABLE>
</CENTER>
</BODY>
</HTML>
●画面2のHTMLファイル[emp_query.php]検索結果表示画面
<HTML>
<HEAD>
<TITLE>社員検索結果表示画面</TITLE>
</HEAD>
<BODY>
<CENTER>
<TABLE><TR>
<TD ALIGN="center" COLSPAN="2"><HR WIDTH="400"></TD>
</TR><TR>
<TD ALIGN="center" COLSPAN="2"><H1>検索結果表示画面</H1></TD>
</TR><TR>
<TD ALIGN="center" COLSPAN="2">検索の結果一致した社員の一覧です。</TD>
</TR><TR>
<TD ALIGN="center" COLSPAN="2">更新・削除する社員を選択してください。</TD>
</TR><TR>
<TD ALIGN="center" COLSPAN="2"><HR WIDTH="400"></TD>
</TR><TR>
<TD COLSPAN="2"><TABLE BORDER WIDTH="350" ALIGN="center"><TR>
<TH></TH><TH></TH><TH>社員番号</TH><TH>氏名</TH><TH>所属部門</TH>
</TR><TR>
<FORM ACTION="" METHOD="post">
<INPUT TYPE="hidden" NAME="" VALUE="7369">
<TD ALIGN="center"><INPUT TYPE="submit" NAME="" VALUE="更新"></TD>
</FORM>
<FORM ACTION="" METHOD="post">
<INPUT TYPE="hidden" NAME="" VALUE="7369">
<TD ALIGN="center"><INPUT TYPE="submit" NAME="" VALUE="削除"></TD>
</FORM>
<TD>7369</TD>
<TD>SCOTT</TD>
<TD>SALES</TD>
</TR><TR>
<FORM ACTION="" METHOD="post">
<INPUT TYPE="hidden" NAME="" VALUE="0000">
<TD ALIGN="center"><INPUT TYPE="submit" NAME="" VALUE="更新"></TD>
</FORM>
<FORM ACTION="" METHOD="post">
<INPUT TYPE="hidden" NAME="" VALUE="0000">
<TD ALIGN="center"><INPUT TYPE="submit" NAME="" VALUE="削除"></TD>
</FORM>
<TD>0000</TD>
<TD>ICHISHI</TD>
<TD>ENGINEER</TD>
</TR></TABLE></TD>
</TR><TR>
<TD ALIGN="center" COLSPAN="2"><HR WIDTH="400"></TD>
</TR><TR>
<TD ALIGN="right" COLSPAN="2">Copyright 2000, Tatsuya Ichishi</TD>
</TR></TABLE>
</CENTER>
</BODY>
</HTML>
●リスト4 完成したemp_menu.phpの内容(PostgreSQL用)
<?php
$conn=pg_Connect("host=cinderella dbname=employee port=5432");
?>
<HTML>
<HEAD>
<TITLE>社員検索条件入力画面</TITLE>
</HEAD>
<BODY>
<CENTER>
<TABLE><TR>
<TD ALIGN="center" COLSPAN="2"><HR WIDTH="400"></TD>
</TR><TR>
<TD ALIGN="center" COLSPAN="2"><H1>検索条件入力画面</H1></TD>
</TR><TR>
<TD ALIGN="center" COLSPAN="2">社員情報のメンテナンスを行えます。</TD>
</TR><TR>
<TD ALIGN="center" COLSPAN="2">検索条件を入力して検索してください。</TD>
</TR><TR>
<TD ALIGN="center" COLSPAN="2">氏名だけは部分一致検索を行います。</TD>
</TR><TR>
<TD ALIGN="center" COLSPAN="2"><HR WIDTH="400"></TD>
</TR><TR>
<FORM ACTION="emp_query.php" METHOD="post">
<TD ALIGN="right">部門名称:</TD><TD>
<SELECT NAME="inp_dept">
<OPTION SELECTED VALUE="NULL">指定なし</OPTION>
<?php
$i = 0;
$result = pg_Exec($conn, "select deptno, dname from dept");
if ($result) {
do {
@$row = pg_Fetch_Row ($result, $i);
if ($row) {
print('<OPTION VALUE="'. $row[0]. '">'. $row[1]. '</OPTION>'. "\n");
$i++;
}
} while ($row);
}
?></SELECT>
</TD>
</TR><TR>
<TD ALIGN="right">社員番号:</TD><TD><INPUT TYPE="text" NAME="inp_empno"></TD>
</TR><TR>
<TD ALIGN="right">社員氏名:</TD><TD><INPUT TYPE="text" NAME="inp_ename"></TD>
</TR><TR></TR><TR>
<TD COLSPAN="2" ALIGN="center"><INPUT TYPE="submit" NAME="inp_submit" VALUE="検索実行">
<INPUT TYPE="reset" VALUE="条件削除"></TD>
</TR><TR>
</FORM>
<TD ALIGN="center" COLSPAN="2"><HR WIDTH="400"></TD>
</TR><TR>
<TD ALIGN="center" COLSPAN="2">新しく社員を追加する場合は、新規追加ボタンを押してください。</TD>
</TR><TR>
<FORM ACTION="emp_add.php" METHOD="post">
<TD ALIGN="center" COLSPAN="2"><INPUT TYPE="submit" NAME="inp_submit" VALUE="新規追加"></TD>
</FORM>
</TR><TR>
<TD ALIGN="center" COLSPAN="2"><HR WIDTH="400"></TD>
</TR><TR>
<TD ALIGN="right" COLSPAN="2">Copyright 2000, Tatsuya Ichishi</TD>
</TR></TABLE>
</CENTER>
</BODY>
</HTML>
<?php
pg_Close($conn);
?>
●リスト6 条件を意識せずに作った例(PostgreSQL用)
<?php
$conn=pg_Connect("host=cinderella dbname=employee port=5432");
?>
<HTML>
<HEAD>
<TITLE>社員検索結果表示画面</TITLE>
</HEAD>
<BODY>
<CENTER>
<TABLE><TR>
<TD ALIGN="center" COLSPAN="2"><HR WIDTH="400"></TD>
</TR><TR>
<TD ALIGN="center" COLSPAN="2"><H1>検索結果表示画面</H1></TD>
</TR><TR>
<TD ALIGN="center" COLSPAN="2">検索の結果一致した社員の一覧です。</TD>
</TR><TR>
<TD ALIGN="center" COLSPAN="2">更新・削除する社員を選択してください。</TD>
</TR><TR>
<TD ALIGN="center" COLSPAN="2"><HR WIDTH="400"></TD>
</TR><TR>
<TD COLSPAN="2"><TABLE BORDER WIDTH="350" ALIGN="center"><TR>
<TH></TH><TH></TH><TH>社員番号</TH><TH>氏名</TH><TH>所属部門</TH>
</TR>
<?php
$sql = "select e.empno, e.ename, d.dname from emp e, dept d where e.deptno = d.deptno";
$i = 0;
$result = pg_Exec($conn, $sql);
if ($result) {
do {
@$row = pg_Fetch_Row ($result, $i);
if ($row) {
print ('<TR>'."\n");
print ('<FORM ACTION="emp_update.php" METHOD="post">'."\n");
print ('<INPUT TYPE="hidden" NAME="inp_empno" VALUE="'.$row[0].'">'."\n");
print ('<TD ALIGN="center"><INPUT TYPE="submit" NAME="inp_submit" VALUE="更新"></TD>'."\n");
print ('</FORM>'."\n");
print ('<FORM ACTION="emp_del.php" METHOD="post">'."\n");
print ('<INPUT TYPE="hidden" NAME="inp_empno" VALUE="'.$row[0].'">'."\n");
print ('<TD ALIGN="center"><INPUT TYPE="submit" NAME="inp_submit" VALUE="削除"></TD>'."\n");
print ('</FORM>'."\n");
print ('<TD>'.$row[0].'</TD>'."\n");
print ('<TD>'.$row[1].'</TD>'."\n");
print ('<TD>'.$row[2].'</TD>'."\n");
print ('</TR>'."\n");
$i++;
}
} while ($row);
}
?>
</TABLE></TD>
</TR><TR>
<TD ALIGN="center" COLSPAN="2"><HR WIDTH="400"></TD>
</TR><TR>
<TD ALIGN="right" COLSPAN="2">Copyright 2000, Tatsuya Ichishi</TD>
</TR></TABLE>
</CENTER>
</BODY>
</HTML>
<?php
pg_Close($conn);
?>
●リスト8 完成した検索結果画面(PostgreSQL用)
<?php
$conn=pg_Connect("host=cinderella dbname=employee port=5432");
?>
<HTML>
<HEAD>
<TITLE>社員検索結果表示画面</TITLE>
</HEAD>
<BODY>
<CENTER>
<TABLE><TR>
<TD ALIGN="center" COLSPAN="2"><HR WIDTH="400"></TD>
</TR><TR>
<TD ALIGN="center" COLSPAN="2"><H1>検索結果表示画面</H1></TD>
</TR><TR>
<TD ALIGN="center" COLSPAN="2">検索の結果一致した社員の一覧です。</TD>
</TR><TR>
<TD ALIGN="center" COLSPAN="2">更新・削除する社員を選択してください。</TD>
</TR><TR>
<TD ALIGN="center" COLSPAN="2"><HR WIDTH="400"></TD>
</TR><TR>
<TD COLSPAN="2"><TABLE BORDER WIDTH="350" ALIGN="center"><TR>
<TH></TH><TH></TH><TH>社員番号</TH><TH>氏名</TH><TH>所属部門</TH>
</TR>
<?php
$sql = "select e.empno, e.ename, d.dname from emp e, dept d where e.deptno = d.deptno";
if (!empty($inp_empno)) {
$sql = $sql. " and e.empno = ". $inp_empno;
}
if (!empty($inp_ename)) {
$sql = $sql. " and e.ename like '%". $inp_ename. "%'";
}
if (!empty($inp_dept) and ($inp_dept != "NULL")) {
$sql = $sql. " and e.deptno = ". $inp_dept;
}
$i = 0;
$result = pg_Exec($conn, $sql);
if ($result) {
do {
@$row = pg_Fetch_Row ($result, $i);
if ($row) {
print ('<TR>'."\n");
print ('<FORM ACTION="emp_update.php" METHOD="post">'."\n");
print ('<INPUT TYPE="hidden" NAME="inp_empno" VALUE="'.$row[0].'">'."\n");
print ('<TD ALIGN="center"><INPUT TYPE="submit" NAME="inp_submit" VALUE="更新"></TD>'."\n");
print ('</FORM>'."\n");
print ('<FORM ACTION="emp_del.php" METHOD="post">'."\n");
print ('<INPUT TYPE="hidden" NAME="inp_empno" VALUE="'.$row[0].'">'."\n");
print ('<TD ALIGN="center"><INPUT TYPE="submit" NAME="inp_submit" VALUE="削除"></TD>'."\n");
print ('</FORM>'."\n");
print ('<TD>'.$row[0].'</TD>'."\n");
print ('<TD>'.$row[1].'</TD>'."\n");
print ('<TD>'.$row[2].'</TD>'."\n");
print ('</TR>'."\n");
$i++;
}
} while ($row);
}
?>
</TABLE></TD>
</TR><TR>
<TD ALIGN="center" COLSPAN="2"><HR WIDTH="400"></TD>
</TR><TR>
<TD ALIGN="right" COLSPAN="2">Copyright 2000, Tatsuya Ichishi</TD>
</TR></TABLE>
</CENTER>
</BODY>
</HTML>
<?php
pg_Close($conn);
?>
●PostgreSQL 関数 ■PHP マニュアル - http://www.php.net/manual/ja/ IV.関数リファレンス LXXXI. PostgreSQL 関数 ●pg_affected_rows -- 変更されたレコード(タプル)の数を返す ●pg_cancel_query -- 非同期クエリを取り消す ●pg_client_encoding -- PostgreSQLクライアントのエンコーディングを取得する ●pg_close -- PostgreSQL接続を閉じる ●pg_connect -- PostgreSQL接続を開く ●pg_connection_busy -- 接続がビジーかどうか調べる ●pg_connection_reset -- 接続をリセット(再接続)する ●pg_connection_status -- 接続ステータスを取得する ●pg_convert -- SQL命令として実行可能な形式の連想配列の値に変換する ●pg_copy_from -- 配列からテーブルをコピーする ●pg_copy_to -- 配列にテーブルをコピーする ●pg_dbname -- データベース名の取得 string pg_dbname ( resource connection) 指定したPostgreSQL接続IDが接続しているデータベースの名前を返します ●pg_delete -- Delete records. (PHP 4 >= 4.3.0) long pg_delete ( resource connection, string table_name, array assoc_array [, int options]) 例:$res = pg_delete($db, 'post_log', $_POST); ●pg_end_copy -- PostgreSQLバックエンドに同期する ●pg_escape_bytea -- bytea型にバイナリをエスケープする ●pg_escape_string -- テキスト/文字型用の文字列をエスケープする ●pg_fetch_all -- Fetch a row as an array ●pg_fetch_array -- 行を配列として取得する ●pg_fetch_assoc -- Fetch a row as an array ●pg_fetch_object -- 行をオブジェクトとして得る ●pg_fetch_result -- 結果リソースから値を返す ●pg_fetch_row -- 数字をインデックスとする配列として行を得る ●pg_field_is_null -- フィールドがNULLかどうか調べる ●pg_field_name -- フィールドの名前を返す(PHP 4 >= 4.2.0) string pg_field_name ( resource result, int field_number) 例:campo=pg_fieldname($res,0); ●pg_field_num -- Returns the field number of the named field ●pg_field_prtlen -- 表示される長さを返す(PHP 4 >= 4.2.0) int pg_field_prtlen ( resource result, int row_number, string field_name) ●pg_field_size -- 指定したフィールドの内部記憶領域におけるサイズを返す(PHP 4 >= 4.2.0) int pg_field_size ( resource result, int field_number) ●pg_field_type -- フィールド番号に対応する型名を返す ●pg_free_result -- メモリを開放する ●pg_get_notify -- Ping database connection ●pg_get_pid -- Ping database connection ●pg_get_result -- 非同期クエリの結果を取得する ●pg_host -- ホスト名を返す ●pg_insert -- テーブルに配列を挿入する ●pg_last_error -- 特定の接続から直近のエラーメッセージ文字列を取得する ●pg_last_notice -- PostgreSQLサーバからの直近の通知メッセージを返す ●pg_last_oid -- 直近のオブジェクトIDを返す ●pg_lo_close -- ラージオブジェクトをクローズする ●pg_lo_create -- ラージオブジェクトを生成する ●pg_lo_export -- ラージオブジェクトをファイルにエクスポートする ●pg_lo_import -- ファイルからラージオブジェクトをインポートする ●pg_lo_open -- ラージオブジェクトをオープンする ●pg_lo_read_all -- ラージオブジェクト全体を読み込みブラウザに直接送信する ●pg_lo_read -- ラージオブジェクトを読み込む ●pg_lo_seek -- ラージオブジェクトの位置をシークする ●pg_lo_tell -- ラージオブジェクトのカレントの位置を返す ●pg_lo_unlink -- ラージオブジェクトを削除する ●pg_lo_write -- ラージオブジェクトを書く ●pg_meta_data -- Get meta data for table. ●pg_num_fields -- フィールド数を返す ●pg_num_rows -- 行数を返す ●pg_options -- 接続に関連するオプションを取得する ●pg_pconnect -- 持続的なデータベース接続をオープンする ●pg_ping -- Ping database connection ●pg_port -- 接続に関連するポート番号を返す ●pg_put_line -- NULLで終る文字列をPostgreSQLバックエンドに送信する ●pg_query -- クエリを実行する(PHP 4 >= 4.2.0) resource pg_query ( resource connection, string query) 注意 この関数は、pg_exec()と呼ばれていました。 pg_exec()は互換性確保のためにまだ 使用可能ですが、 新しい名前を使用することが推奨されています。 例:$ResId = pg_exec ("select * from table", $ConnId); 例:$conn = pg_connect("host=$sv dbname=$dbname user=$user password=$pass") or die("接続エラー"); $sql = "SELECT id, nam, pre, ag FROM table1 ORDER BY id"; $res = pg_query($conn, $sql) or die("データ抽出エラー"); ●pg_result_error -- 結果に関連するエラーメッセージを取得する(PHP 4 >= 4.2.0) string pg_result_error ( resource result) ●pg_result_seek -- Set internal row offset in result resource(PHP 4 >= 4.3.0) array pg_result_seek ( resource result, int offset) ●pg_result_status -- クエリ結果のステータスを取得する(PHP 4 >= 4.2.0) int pg_result_status ( resource result) pg_result_status()は、結果リソースのステータス を返します。返り値は、PGSQL_EMPTY _QUERY, PGSQL_COMMAND_OK, PGSQL_TUPLES_OK, PGSQL_COPY_TO, PGSQL_COPY_FROM, PGSQL _BAD_RESPONSE, PGSQL_NONFATAL_ERROR, PGSQL_FATAL_ERRORのどれかとなります。 pgsql_connection_status()も参照下さい。 ●pg_select -- レコードを選択する(PHP 4 >= 4.3.0) array pg_select ( resource connection, string table_name, array assoc_array [, bool convert]) pg_select()は、field=>value形 式のassoc_arrayで指定したレコードを選択します。 ク エリに成功した場合、assoc_arrayで指定した条件 にマッチする全てのレコードとフィー ルドを含む配列が返されます。 convertが指定されないかTRUEの場合、 pg_convert()が assoc_arrayに適 用されます。 例: rec = pg_select($db, 'post_log', $_POST); if ($rec) { echo "レコードが選択されました。\n"; var_dump($rec); } else { echo "ユーザが誤った入力を送信しました。\n"; ●pg_send_query -- 非同期クエリを送信する ●pg_set_client_encoding -- PostgreSQLクライアントのエンコーディングを設定する ●pg_trace -- PostgreSQLサーバーへの接続をトレースする ●pg_tty -- tty名を返す ●pg_unescape_bytea -- Escape binary for bytea type ●pg_untrace -- PostgreSQLサーバーへの接続のトレースを無効にする ●pg_update -- テーブルを更新する(PHP 4 >= 4.3.0) long pg_update ( resource connection, string table_name, array condition, array data [, bool convert]) pg_update()は、dataに関して conditionにマッチするレコードを更新します 例: $res = pg_update($db, 'post_log', $_POST, $data); if ($res) { echo "データが更新されました: $res\n"; } else { echo "ユーザが誤った入力を送信しました。\n"; }
■インストール〜PHP
●一般的なインストール ●PHP4 のインストール&設定を参考に - http://itb-tech.itboost.co.jp/inst/inst_48.php ■ソースの取得、解凍 ここでは、PHP4.1.2をインストールしていきます。 PHPでは4.1.2未満のバージョンにセキュリティーホールが存在しています。必ず4.1.2以降のバージョン を使用するか、現在動作させているPHPにセキュリティーパッチをあててください。 ★ダウンロード PHP4 ( php-4.1.2.tar.gz ) を下記からダウンロードします。 http://www.php.net/downloads.php 日本語正規表現モジュールソース mbregex ( php4_mbregex-1.3.1.tar.gz ) を下記から ダウンロード。 ftp://night.fminn.nagano.nagano.jp/php4/ ダウンロードしたソースを /usr/local/src におき、そこに cd します。
mv /home/hoge/php-4.1.2.tar.gz /usr/local/src/
mv /home/hoge/php4_mbregex-1.3.1.tar.gz /usr/local/src/
cd /usr/local/src/
(移動元のディレクトリは適宜読み替えてください。)
このソースは、たくさんのファイルを tar というアプリケーションで一つにまとめ、 gzip というアプリケーション で圧縮されています(拡張子に注目)。この種のファイルを使えるようにするためには、tar と gunzip を用います。 tar にもいろいろ種類があるのですが、 tar --version として、GNU tar という記述がでてくれば、その tar は gunzip の機能も持っています。
その場合は、
tar xvfz php-4.1.2.tar.gz
で解凍できます。 上記がうまくいかない場合は、
gunzip -c php-4.1.2.tar.gz | tar xf -
で多分うまくいくはずです。つぎに、解凍した PHP のソースディレクトリの下の ext ディレクトリに mbregex を展開します。
cd php-4.1.2/ext
tar xvfz ../../php4_mbregex-1.3.1.tar.gz
■PHP のインストール(表示の都合により、2行で分かれている場合があります。\ で終わっている行は、次の行に続きます。)
cd ../
./configure --enable-mbstring \
--enable-mbstr-enc-trans \
--enable-mbregex \
--with-pgsql=/usr/local/pgsql/ \
--with-apxs=/usr/local/apache/bin/apxs \
--enable-trans-sid
make
make install
configure にたくさん指定をつけていますが、--enable-mbstring・--enable-mbstr-enc-trans・--enable-mbregex は日本語の使用を有効にするためのオプションです。--with-apxs=/usr/local/apache/bin/apxs は Apache の DSO モジュール版としての構築を意味します。--with-pgsql は PostgreSQL にアクセスする関数を利用するための指定 です。--enable-trans-sid はクッキーが使えない場合などに自動的にセッションIDをHTTPパラメータとして付加し てくれる便利な機能を有効にするためのオプションです。つぎに、mbregex をインストールします。mbregex の組み込み方としては、静的な組み込みと動的な組み込みがあり ます。ここでは動的な組み込みをすることとします。
cd ext/mbregex
phpize
./configure --enable-mbregex
make
make install最後に、PHP4 の挙動をコントロールする php.ini ファイルをコピーしておきます。
cp php.ini-dist /usr/local/lib/php.ini
■設定(httpd.conf)さて、Apache の挙動をコントロールする設定ファイルの編集に移ります。対象となる設定ファイルは、/usr/local/apache/conf/httpd.conf です。
まず、PHP4 スクリプトを PHP4 スクリプトだと認識させなければなりません。 httpd.conf ファイル中に下記のような記述があります。
#<br>
# And for PHP 4.x, use:
#<br>
#AddType application/x-httpd-php .php
#AddType application/x-httpd-php-source .phps
↑これを、このように↓コメントをはずし、必要に応じて PHP4 の記述を追加してください(わからない人は、下記の通りに設定してください)。
#<br>
# And for PHP 4.x, use:
#<br>
AddType application/x-httpd-php .php .php4
AddType application/x-httpd-php-source .phps
つぎに、PostgreSQL のアクセス用関数で使用する、ライブラリの設定をします。 以下のような記述を追記してください。
LoadFile /usr/local/pgsql/lib/libpq.so
LoadModule php4_module libexec/libphp4.so
また、ClearModuleList という記述があって、かつ下記の記述がなければ、AddModule が列記されているところに追加し てください。
AddModule mod_php4.c
最後に、index.php, index.php4 という名前のファイルを、http://hoge.com/ などにアクセスがあったときに使うよう設定します。
<IfModule mod_dir.c>
DirectoryIndex index.html index.php index.php4
</IfModule>
■起動&動作確認Apache の起動は、/usr/local/apache/bin/apachectl コマンドを使います。使い方は、
起動: /usr/local/apache/bin/apachectl start
終了: /usr/local/apache/bin/apachectl stop
再起動: /usr/local/apache/bin/apachectl restart
です。httpd.conf を書き直した後、必ず再起動しなければ設定が反映されません。Apache を起動した後、適当なマシンから http://Apacheの起動しているホスト名/ を表示してみてください。Apache の画面が出てきたら、インストール成功です。
次に、PHP が正しく埋め込まれているかどうかのテストです。 /usr/local/apache/htdocs/phptest.php4 というファイルに
<?phpinfo();?>
とだけ書いて保存してください。その後、適当なマシンから、 http://Apacheの起動しているホスト名/test.php4 を表示してみてください。派手な表が出てきたら、インストールは正しく行われています。表示の中に、PHP4 のバージョンも含まれていますので、確認しておいてください。/usr/local/apache/htdocs/ ディレクトリが、URL で指定するときのルートディレクトリになります。このディレクトリの下にファイルを作っていけば、ホームページとして表示されます。もちろん、httpd.conf の設定でディレクトリを変更することも可能です。
■ブート時に自動起動するようにするApache などのサーバーソフトウェアは、ブート時に自動的に起動すると便利です。方法は OS によって異なるのですが、/etc/rc* というファイルやディレクトリが起動時に読み込まれることが多いです。ここでは、RedHat Linux 7.2 における、ブート時自動起動の方法を書きます。
対象となるファイルは、/etc/rc.d/rc.local です。このファイルがブート時、最後に実行されます。上記ファイルの末尾に、
/usr/local/apache/bin/apachectl start
を書き足せば OK です。RedHat 系の OS であれば、chkconfig を使用してもいいでしょう。
●インストールの実際 [ft:/usr/local/src/php]# mkdir /usr/local/lib/php [ft:/usr/local/src]# cd php/ [ft:/usr/local/src/php]# tar xfz php-4.2.2.tar.gz [ft:/usr/local/src/php]# cd php-4.2.2/ [ft:/usr/local/s