Upload
others
View
7
Download
0
Embed Size (px)
Citation preview
PHP-20092009年02月
Linux
Symfoware Server
PHPドライバユーザーズガイド
まえがき
本書の目的
本書は、PHP(Hypertext Preprocessor)からSymfoware/RDBをアクセスするための機構であるSymfoware関数、Symfoware/RDBなどの
データベースアクセスを抽象化するクラスであるPEAR for Symfoware(PHP Extension and Application Repository for Symfoware)、PHPlib for Symfoware(PHP Base Library for Symfoware)のユーザーズガイドです。
本書の読者
本書は、PHPからSymfoware/RDBのデータベースをアクセスする方に読んでいただくように書かれています。
本書を読むには、以下に示す知識が必要です。
・ Symfoware/RDBの機能およびデータベースの概要
・ SQL文に関する知識
・ Webに関する基本的な知識
・ Apacheに関する基本的な知識
・ PHPに関する基本的な知識
・ HTMLに関する基本的な知識
本書の構成
第1章 PHP Symfowareの概要
PHP、PHP Symfowareの概要について説明しています。
第2章 PHP Symfowareの導入
PHP、PHP Symfowareの導入方法について説明しています。
第3章 PHP Symfowareの使用
PHPからSymfoware/RDBのデータベースをアクセスする方法について説明しています。
第4章 Symfoware関数の仕様
Symfoware関数を用いてSymfoware/RDBのデータベースをアクセスするときの仕様について説明しています。
第5章 PEAR for Symfowareの仕様
PEAR for Symfowareを用いてSymfoware/RDBのデータベースをアクセスするときの仕様について説明しています。
第6章 PHPlib for Symfowareの仕様
PHPlib for Symfowareを用いてSymfoware/RDBのデータベースをアクセスするときの仕様について説明しています。
第7章 PHP Symfowareの環境設定
PHP Symfowareの環境を設定する方法について説明しています。
第8章 RDBコマンドの呼び出し
PHPのコマンド呼び出し機能を用いてPHPからRDBコマンドを呼び出す方法について説明しています。
第9章 注意事項
PHPからSymfoware/RDBのデータベースをアクセスするときの注意事項について説明しています。
付録A connect、pconnectのパラメタの記述形式
connect、pconnectで指定するパラメタの記述形式について説明しています。
付録B PHP Symfowareの修正履歴
PHP Symfowareのソースの修正履歴について説明しています。
- i -
付録C PHP Symfowareのソースの構成
PHP Symfowareのソースの構成について説明しています。
用語集
本書で使用する用語の意味を定義しています。
本書の位置づけ
Symfoware Serverの関連マニュアルと、本書中での表記について以下に示します。Symfoware Serverのマニュアルは、製品のCD-ROMに添付されています。
本書での表記 マニュアル名
スタートガイド サーバ編 FUJITSU Symfoware Server スタートガイド サーバ
編
RDBユーザーズガイド
応用プログラム開発編
FUJITSU Symfoware Server RDBユーザーズガイド
応用プログラム開発編
RDBユーザーズガイド
データベース定義編
FUJITSU Symfoware Server RDBユーザーズガイド
データベース定義編
SQLリファレンスガイド FUJITSU Symfoware Server SQLリファレンスガイド
RDB管理者ガイド(注) Symfoware Server RDB管理者ガイド
注) Symfoware Serverの製品のOSとVLにより参照マニュアルが異なります。
Symfoware/RDBが出力するメッセージの処置を参照する
Symfoware/RDBが出力するメッセージの意味および利用者の処置は、RDBコマンド(rdbprtmsgコマンド)を利用して参照できます。
注意事項
本書の中でマニュアル作成時点でのWebのURL(Uniform Resource Locator)を記載していますが、URLがなくなっている場合があり
ます。
本書の中にマニュアル作成時点での 新のソフトウェアのバージョンを記載していますが、現在ではさらに 新のバージョンが提供さ
れている場合があります。
本書の対応する製品
・ Apache 1.3.26
・ PHP 4.2.2
・ PEAR(PHPに同梱)
・ PHPlib 7.4-pre1
・ Symfoware関数 1.0.0
・ PEAR for Symfoware 1.0.0
・ PHPlib for Symfoware 1.0.0
・ Symfoware Server Standard Edition V5.0L10
説明用モデルについて
本書で使用するデータベースは架空のものであり、現実のものとは何の関係もありません。
略称
本書で使用する略称を以下に示します。
- ii -
略称 正式名称
Windows Microsoft(R) Windows(R) 95 operating system、
Microsoft(R) Windows(R) 98 operating system、
Microsoft(R) Windows(R) 98 Second Edition、Microsoft(R) Windows(R) Millennium Edition、Microsoft(R) Windows NT(R) Server, EnterpriseServer Edition、Microsoft(R) Windows NT(R) Server, TerminalServer Edition、Microsoft(R) Windows NT(R) Server networkoperating system、
Microsoft(R) Windows NT(R) Workstation operatingsystem、
Microsoft(R) Windows(R) 2000 Professionaloperating system、
Microsoft(R) Windows(R) 2000 Advanced Serveroperating system、
Microsoft(R) Windows(R) 2000 Server operatingsystem、
Microsoft(R) Windows(R) 2000 Professionaloperating system、
Microsoft(R) Windows(R) XP Professional、および
Microsoft(R) Windows(R) XP Home Edition
Windows NT/2000/XP Microsoft(R) Windows NT(R) Server, EnterpriseServer Edition、Microsoft(R) Windows NT(R) Server, TerminalServer Edition、Microsoft(R) Windows NT(R) Server networkoperating system、
Microsoft(R) Windows NT(R) Workstation operatingsystem、
Microsoft(R) Windows(R) 2000 Professionaloperating system、
Microsoft(R) Windows(R) 2000 Advanced Serveroperating system、
Microsoft(R) Windows(R) 2000 Server operatingsystem、
Microsoft(R) Windows(R) 2000 Professionaloperating system、および
Microsoft(R) Windows(R) XP Professional
Windows 2000/XP Microsoft(R) Windows(R) 2000 Professionaloperating system、
Microsoft(R) Windows(R) 2000 Advanced Serveroperating system、
Microsoft(R) Windows(R) 2000 Server operatingsystem、
Microsoft(R) Windows(R) 2000 Professionaloperating system および
Microsoft(R) Windows(R) XP Professional
商標
Apacheは、Apache Software Foundation.の著作です。
PHPは、PHP Group.の著作です。
GNUgccは、Free Software Foundation,Inc. の著作です。
- iii -
GNUzipは、Free Software Foundation,Inc. の著作です。
Microsoft、Windows、Windows 95/98/Me/NT/2000/XPは、米国Microsoft Corporationの米国およびそのほかの国での登録商標です。
UNIXは、The Open Groupの米国ならびにほかの国での登録商標です。
Linuxは、Linus Torvalds氏の米国およびその他の国における登録商標あるいは商標です。
Symfowareは、富士通株式会社の登録商標です。
そのほか、本書に記載されている会社名および製品名は、それぞれ各社の商標または登録商標です。
なお、本マニュアルでは、(R)、TM表記を省略しています。
平成21年2月
平成14年 11月 初版
平成21年 2月 第2版
告知文
[高度な安全性が要求される用途への使用について]
本製品は、一般事務、パーソナル用、家庭用、通常の産業等の一般用途を想定して開発・設計・製造されているものであり、原子力施
設における核反応制御、航空機自動飛行機制御、航空交通管制、大量輸送システムにおける運行制御、生命維持のための医療用
機器、兵器システムにおけるミサイル発射制御など、極めて高度な安全性が要求され、仮に当該安全性が確保されない場合、直接生
命・身体に対する重大な危険性を伴う用途(以下、「ハイセイフティ用途」という)に使用されるよう開発・設計・製造されたものではあり
ません。
お客さまは本製品を必要な安全性を確保する措置を施すことなくハイセイフティ用途に使用しないでください。また、お客さまがハイセ
イフティ用途に本製品を使用したことにより発生する、お客様または第三者からのいかなる請求または損害賠償に対しても富士通株
式会社およびその関連会社は一切責任を負いかねます。
All Rights Reserved, Copyright(C) 富士通株式会社 2009
- iv -
目 次
第1章 PHP Symfowareの概要..................................................................................................................................................11.1 PHPとは...............................................................................................................................................................................................11.2 PHP Symfowareとは............................................................................................................................................................................1
第2章 PHP Symfowareの導入..................................................................................................................................................32.1 導入方法.............................................................................................................................................................................................3
2.1.1 インストール済みパッケージのアンインストール.........................................................................................................................32.1.2 アーカイバのインストール............................................................................................................................................................42.1.3 コンパイラのインストール..............................................................................................................................................................42.1.4 Symfowareのインストール............................................................................................................................................................42.1.5 Apacheのインストール..................................................................................................................................................................42.1.6 PHPのビルドで使用するコマンドのインストール.........................................................................................................................52.1.7 PHPのインストール.......................................................................................................................................................................52.1.8 PHP Symfowareのインストール....................................................................................................................................................62.1.9 Apacheのセットアップ.................................................................................................................................................................10
第3章 PHP Symfowareの使用................................................................................................................................................123.1 PHPスクリプトの作成および実行......................................................................................................................................................123.2 PHP Symfowareの規約.....................................................................................................................................................................13
3.2.1 PHP Symfowareの仕様..............................................................................................................................................................133.2.2 変数の規約.................................................................................................................................................................................133.2.3 真、偽..........................................................................................................................................................................................143.2.4 SQL文の規約.............................................................................................................................................................................14
第4章 Symfoware関数の仕様................................................................................................................................................. 164.1 Symfoware関数の概要.....................................................................................................................................................................16
4.1.1 Symfoware関数のスクリプト例...................................................................................................................................................164.2 Symfoware関数.................................................................................................................................................................................17
4.2.1 symfoware_autocommit..............................................................................................................................................................174.2.2 symfoware_binmode...................................................................................................................................................................184.2.3 symfoware_close........................................................................................................................................................................194.2.4 symfoware_close_all..................................................................................................................................................................204.2.5 symfoware_columnprivileges.....................................................................................................................................................204.2.6 symfoware_columns...................................................................................................................................................................204.2.7 symfoware_commit....................................................................................................................................................................234.2.8 symfoware_connect....................................................................................................................................................................234.2.9 symfoware_cursor.......................................................................................................................................................................244.2.10 symfoware_do...........................................................................................................................................................................254.2.11 symfoware_error.......................................................................................................................................................................254.2.12 symfoware_errormsg................................................................................................................................................................274.2.13 symfoware_exec.......................................................................................................................................................................274.2.14 symfoware_execute..................................................................................................................................................................284.2.15 symfoware_fetch_array............................................................................................................................................................294.2.16 symfoware_fetch_into..............................................................................................................................................................304.2.17 symfoware_fetch_object...........................................................................................................................................................314.2.18 symfoware_fetch_row..............................................................................................................................................................324.2.19 symfoware_field_len................................................................................................................................................................344.2.20 symfoware_field_name.............................................................................................................................................................344.2.21 symfoware_field_num..............................................................................................................................................................354.2.22 symfoware_field_precision.......................................................................................................................................................354.2.23 symfoware_field_scale.............................................................................................................................................................364.2.24 symfoware_field_type..............................................................................................................................................................364.2.25 symfoware_foreignkeys............................................................................................................................................................374.2.26 symfoware_free_result..............................................................................................................................................................374.2.27 symfoware_gettypeinfo............................................................................................................................................................384.2.28 symfoware_isnull......................................................................................................................................................................41
- v -
4.2.29 symfoware_longreadlen............................................................................................................................................................424.2.30 symfoware_next_result.............................................................................................................................................................434.2.31 symfoware_num_fields.............................................................................................................................................................434.2.32 symfoware_num_rows..............................................................................................................................................................444.2.33 symfoware_pconnect................................................................................................................................................................454.2.34 symfoware_prepare...................................................................................................................................................................464.2.35 symfoware_primarykeys...........................................................................................................................................................464.2.36 symfoware_procedurecolumns.................................................................................................................................................484.2.37 symfoware_procedures.............................................................................................................................................................514.2.38 symfoware_result......................................................................................................................................................................524.2.39 symfoware_result_all................................................................................................................................................................534.2.40 symfoware_rollback..................................................................................................................................................................534.2.41 symfoware_setoption................................................................................................................................................................544.2.42 symfoware_specialcolumns......................................................................................................................................................544.2.43 symfoware_statistics.................................................................................................................................................................544.2.44 symfoware_tableprivileges.......................................................................................................................................................544.2.45 symfoware_tables.....................................................................................................................................................................54
第5章 PEAR for Symfowareの仕様.........................................................................................................................................575.1 PEAR for Symfowareの概要............................................................................................................................................................57
5.1.1 PEARの特徴..............................................................................................................................................................................575.1.2 PEAR for Symfowareのスクリプト例..........................................................................................................................................57
5.2 DBクラスのインクルード....................................................................................................................................................................585.2.1 require_once( "DB.php" )...........................................................................................................................................................58
5.3 DBクラス.............................................................................................................................................................................................585.3.1 connect........................................................................................................................................................................................585.3.2 disconnect...................................................................................................................................................................................605.3.3 isWarning....................................................................................................................................................................................615.3.4 isError.........................................................................................................................................................................................615.3.5 quote............................................................................................................................................................................................615.3.6 provides.......................................................................................................................................................................................625.3.7 setFetchMode..............................................................................................................................................................................635.3.8 prepare........................................................................................................................................................................................645.3.9 execute........................................................................................................................................................................................655.3.10 executeMultiple........................................................................................................................................................................665.3.11 query.........................................................................................................................................................................................675.3.12 limitQuery.................................................................................................................................................................................685.3.13 getOne.......................................................................................................................................................................................685.3.14 getRow......................................................................................................................................................................................705.3.15 getCol........................................................................................................................................................................................715.3.16 getAssoc....................................................................................................................................................................................725.3.17 getAll .......................................................................................................................................................................................745.3.18 affectedRows............................................................................................................................................................................765.3.19 nextId........................................................................................................................................................................................775.3.20 createSequence..........................................................................................................................................................................775.3.21 dropSequence............................................................................................................................................................................775.3.22 tableInfo....................................................................................................................................................................................775.3.23 getListOf...................................................................................................................................................................................775.3.24 autoCommit..............................................................................................................................................................................785.3.25 commit......................................................................................................................................................................................785.3.26 rollback.....................................................................................................................................................................................795.3.27 errorNative................................................................................................................................................................................79
5.4 DB_Resultクラス................................................................................................................................................................................805.4.1 fetchRow.....................................................................................................................................................................................805.4.2 fetchInto......................................................................................................................................................................................825.4.3 numCols......................................................................................................................................................................................845.4.4 numRows....................................................................................................................................................................................845.4.5 nextResult...................................................................................................................................................................................85
- vi -
5.4.6 free..............................................................................................................................................................................................855.5 DB_Errorクラス..................................................................................................................................................................................86
5.5.1 getMessage..................................................................................................................................................................................865.5.2 toString........................................................................................................................................................................................87
5.6 DB_Warningクラス.............................................................................................................................................................................875.7 Cacheクラス........................................................................................................................................................................................87
第6章 PHPlib for Symfowareの仕様.......................................................................................................................................886.1 PHPlib for Symfowareの概要...........................................................................................................................................................88
6.1.1 PHPlibの特徴.............................................................................................................................................................................886.1.2 PHPlibで使用するファイル.........................................................................................................................................................88
6.2 PHPlibの使用例................................................................................................................................................................................906.2.1 セション機能の使用例...............................................................................................................................................................906.2.2 認証機能の使用例.....................................................................................................................................................................916.2.3 パーミッション管理機能の使用例..............................................................................................................................................926.2.4 ユーザ変数機能の使用例.........................................................................................................................................................93
第7章 PHP Symfowareの環境設定.........................................................................................................................................947.1 PHP動作環境ファイル.......................................................................................................................................................................947.2 パラメタの詳細...................................................................................................................................................................................94
7.2.1 symfoware.default_db.................................................................................................................................................................947.2.2 symfoware.default_user..............................................................................................................................................................947.2.3 symfoware.default_pw................................................................................................................................................................957.2.4 symfoware.allow_persistent.......................................................................................................................................................957.2.5 symfoware.check_persistent.......................................................................................................................................................957.2.6 symfoware.max_persistent.........................................................................................................................................................967.2.7 symfoware.max_links.................................................................................................................................................................967.2.8 symfoware.defaultlrl...................................................................................................................................................................967.2.9 symfoware.defaultbinmode.........................................................................................................................................................97
第8章 RDBコマンドの呼び出し.................................................................................................................................................988.1 RDBコマンドの呼び出し方法...........................................................................................................................................................988.2 RDBコマンドの呼び出し例...............................................................................................................................................................98
8.2.1 systemを用いたRDBコマンドの呼び出し..................................................................................................................................988.2.2 execを用いたRDBコマンドの呼び出し......................................................................................................................................998.2.3 popenを用いたRDBコマンドの呼び出し....................................................................................................................................99
第9章 注意事項.....................................................................................................................................................................1009.1 PHP Symfowareの制限...................................................................................................................................................................1009.2 RDBコマンドの呼び出しの制限.....................................................................................................................................................1009.3 マルチバイト文字列の注意.............................................................................................................................................................101
9.3.1 マルチバイト文字列の問題......................................................................................................................................................1019.3.2 UTF-8........................................................................................................................................................................................1019.3.3 マルチバイト対応関数..............................................................................................................................................................1029.3.4 シフトJIS対応PHP.....................................................................................................................................................................102
付録A connect、pconnectのパラメタの記述形式....................................................................................................................103
付録B PHP Symfowareの修正履歴.......................................................................................................................................105
付録C PHP Symfowareのソースの構成................................................................................................................................106
用語集...................................................................................................................................................................................107
索引......................................................................................................................................................................................114
- vii -
第1章 PHP Symfowareの概要
本章では、PHP、PHP Symfowareの概要について説明します。
1.1 PHPとは
1.2 PHP Symfowareとは
1.1 PHPとは
PHPについて説明します。
PHPとは
PHP(Hypertext Preprocessor)はインタプリタ型のプログラミング言語です。PHPはWWWサーバ上で動作し、動的なHTML文書を作成
することができます。
PHPスクリプト、PHPモジュール、クラスインタフェース
PHPが処理するプログラムのことをPHPスクリプトと呼びます。
PHPスクリプトから関数インタフェースで外部プログラムを呼び出すことができます。外部プログラムのことをPHPモジュールと呼びます。
PHP 3でオブジェクト思考の概念が追加され、クラスインタフェースでプログラムの呼び出しができるようになりました。
PHPの公開形態
PHPグループが、PHPソースをWebで公開しています。
PHPはPHP Licenseと呼ばれるライセンスに基づいて公開されています。動作保証がないといったPHP Licenseの各種条件を承諾する
ことにより、無償でPHPを使用することができます。
LinuxマシンにはPHPがインストールされていますが、 新のPHPよりも古いことが多いです。 新のPHPではセキュリティ問題といった
重要な修正が行われることがあります。また、 新のPHPのRPMのパッケージが公開されるまでに時間がかかることがあります。また、PHPのRPMのパッケージには期待しているコンパイルオプションが指定されずにビルドされている場合があります。よって、PHP開発チーム
が公開している 新のPHPソースをビルドしてインストールすることが望ましいです。
1.2 PHP Symfowareとは
PHP Symfowareについて説明します。
従来のデータベースのアクセス
これまで、各データベースベンダは、SQL文をC言語などのプログラミング言語に埋め込むといったデータベースのアクセスの手段を
提供してきました。
この機能を用いて、WWWサーバ上で動作するCGIプログラムを作成してきました。データベースアクセスの手段は、各データベース
ベンダで統一されておらず、完全な互換性は保証できませんでした。
PHPのデータベースアクセス
PHPスクリプトからデータベースをアクセスするために、PHP開発チームによって各データベースベンダ固有のデータベースアクセス処
理を行う関数インタフェースのPHPモジュールが用意されました。
複数のデータベースベンダのデータベースをアクセスする場合は、それぞれのデータベースアクセスの関数を呼び分ける必要がある
という欠点があります。
PHPのデータベースアクセスの抽象化
複数のデータベースベンダのデータベースアクセスを1つのクラスインタフェースで行うために、PEAR(PHP Extension and ApplicationRepository)と呼ばれるPHPスクリプトで記述されたクラスインタフェースが用意されました。
PEARには、各データベースベンダ関数をハンドリングする処理が用意されています。
- 1 -
PHPのライブラリ
セション機能、認証機能、パーミッション管理機能およびユーザ変数機能を行うために、PHPlib(PHP Base Library)と呼ばれるPHPスクリプトで記述されたクラスインタフェースが用意されました。
セション機能、認証機能、パーミッション管理機能およびユーザ変数機能の情報はデータベースに保存されます。
PHPlibには、各データベースベンダ関数をハンドリングする処理が用意されています。
PHP Symfowareとは
PHP Symfowareは、Symfoware関数と、PHPlib、PEARから呼び出されるSymfoware関数のハンドリング処理を提供します。これにより、
PHPスクリプトからSymfoware/RDBへのアクセスを可能にします。
PHP Symfowareの公開形態
PHP、PEARの公開形態と同様に、Symfoware関数、PEAR for SymfowareはPHP Licenseと呼ばれるライセンスに基づいて公開しま
す。動作保証がないといったPHP Licenseの各種条件を承諾することにより、無償でSymfoware関数、PEAR for Symfowareを使用する
ことができます。
PHPlibの公開形態と同様に、PHPlib for Symfowareは、LGPL(Library GNU General Public License:ライブラリ一般公共利用承諾、ま
たは、Lesser GNU General Public License:劣等一般公共利用承諾)と呼ばれるライセンスに基づいて公開します。動作保証がないといった
LGPLの各種条件を承諾することにより、無償でPHPlib for Symfowareを使用することができます。
PHP Symfowareは充分なテストを行った上でリリースしていますが、PHP、PHP Symfowareの 終的な動作保証については、ご自身の
責任でお願いします。
- 2 -
第2章 PHP Symfowareの導入
本章では、PHP、PHP Symfowareの導入について説明します。
2.1 導入方法
2.1 導入方法
PHPおよびPHP Symfowareの導入方法について説明します。
各ソフトウェアのデフォルトの設定で説明します。デフォルト以外で設定を行った場合は、適時、読み替えてください。
2.1.1 インストール済みパッケージのアンインストール
インストール済みパッケージのアンインストールについて説明します。
インストール済みパッケージ
すでにインストールされているApacheやPHPを使用する場合、デフォルトの設定でないことがありますので、以降の作業で、各自の設
定値のまま読み替える必要があります。
また、Symfoware関数は、PHP 4.1.0で規定された内部インタフェースを使用していますので、PHP 4.1.0未満でSymfoware関数を使用
することはできません。
また、すでにインストールされているApacheやPHPのバージョンは古いことが多く、すでにインストールされているApacheやPHPを使用
する場合、既知のセキュリティホール問題となることや、 新にて追加された機能を使用することができないことがあります。
よって、すでにインストールされているApache、PHPをアンインストールし、 新のApache、PHPをインストールすることを推奨します。
インストール済みパッケージのアンインストール
1. スーパ・ユーザでログインしてください。
2. 以下のコマンドでPHPやApacheがインストールされていることを確認してください。
rpm -qa | grep php
rpm -qa | grep apache
3. 以下のコマンドでPHPやApacheをアンインストールしてください。
rpm -qa | grep php | xargs rpm -e
rpm -qa | grep apache | xargs rpm -e
4. アンインストールで、“エラー: これらのパッケージを削除すると依存関係を破壊します:”というエラーが発生することがあります。
このとき、3.と同様の操作で依存関係にあるパッケージを削除するか、以下のコマンドで依存関係にあるパッケージを無視して
PHP、Apacheをアンインストールしてください。
rpm -qa | grep php | xargs rpm -e --nodeps
rpm -qa | grep apache | xargs rpm -e --nodeps
5. アンインストールで、“cannot remove /絶対パス名 - directory not empty”というエラーが発生することがありますが、アンインストー
ル自体は成功しています。ディレクトリ配下のファイルは、必要に応じてバックアップしてください。
6. 以下のコマンドでPHPやApacheがインストールされていないことを確認してください。
rpm -qa | grep php
rpm -qa | grep apache
7. 以下のコマンドでApache動作環境ファイルのディレクトリに移動してください。
cd /usr/local/apache/conf
- 3 -
8. 以下のコマンドでApache動作環境ファイルを削除してください。
rm httpd.conf
2.1.2 アーカイバのインストール
アーカイバのインストールについて説明します。
アーカイバのインストール
アーカイバのインストールの作業は不要です。
2.1.3 コンパイラのインストール
コンパイラのインストールについて説明します。
コンパイラのインストール
コンパイラのインストールの作業は不要です。
2.1.4 Symfowareのインストール
Symfowareのインストールについて説明します。
Symfoware/RDBにリモートアクセスする場合のSymfowareのインストール
1. Symfoware Clientをインストールしてください。
Symfoware/RDBにローカルアクセスする場合のSymfowareのインストール
1. Symfoware Serverをインストールしてください。
2.1.5 Apacheのインストール
Apacheのインストールについて説明します。
Apacheのインストール
1. Apacheグループのミラーサイト
(http://www.apache.jp/misc/download.html)から、Apacheソースのアーカイブ(apache-1.3.26.tar.Z)を入手してください。
2. スーパ・ユーザでログインしてください
3. Apacheソースのアーカイブを任意の作業ディレクトリ(ここでは/tmpと仮定します)に置いてください。
4. 以下のコマンドで任意の作業ディレクトリに移動してください。
cd /tmp
5. 以下のコマンドでApacheソースを展開してください。
zcat apache-1.3.26.tar.Z | tar xvf -
6. 以下のコマンドでApacheソースディレクトリに移動してください。
cd /tmp/apache-1.3.26
7. Apacheモジュール版PHPインタプリタを使用する場合、以下のコマンドでビルドの準備を行ってください。
./configure --enable-module=so
- 4 -
8. コマンドライン版PHPインタプリタを使用する場合、以下のコマンドでビルドの準備を行ってください。
./configure
9. 以下のコマンドでApacheをビルドおよびインストールしてください。
make
make install
注意
Apacheのインストールをやりなおす場合、Apacheソースのディレクトリを削除して、手順.3からやりなおしてください。
2.1.6 PHPのビルドで使用するコマンドのインストール
PHPのビルドで使用するコマンドのインストールについて説明します。
PHPでビルドするコマンドのインストール
PHPでビルドするコマンドのインストールの作業は不要です。
2.1.7 PHPのインストール
PHPのインストールについて説明します。
PHPのインストール
1. PHPグループ(http://www.php.net/downloads.php)から、PHPソースのアーカイブ(php-4.2.2.tar.gz)を入手してください。
2. スーパ・ユーザでログインしてください。
3. PHPソースのアーカイブを任意の作業ディレクトリ(ここでは/tmpと仮定します)に置いてください。
4. 以下のコマンドで任意の作業ディレクトリに移動してください。
cd /tmp
5. 以下のコマンドでPHPソースを展開してください。
gunzip -c php-4.2.2.tar.gz | tar xvf -
6. 以下のコマンドでPHPソースディレクトリに移動してください。
cd /tmp/php-4.2.2
7. Apacheモジュール版PHPインタプリタを作成する場合、以下のコマンドでビルドの準備を行ってください。
./buildconf
./configure --without-mysql --enable-mbstring --enable-mbregex --enable-mbstr-euc-trans --with-
apxs=/usr/local/apache/bin/apxs
8. コマンドライン版PHPインタプリタを作成する場合、以下のコマンドでビルドの準備を行ってください。
./buildconf
./configure --without-mysql --enable-mbstring --enable-mbregex --enable-mbstr-euc-trans --
enable-force-cgi-redirect
9. 以下のコマンドでPHPをビルドおよびインストールしてください。
make
make install
- 5 -
10. 以下のコマンドでPHP動作環境ファイル雛形のディレクトリに移動してください。
cd /tmp/php-4.2.2
11. 以下のコマンドでPHP動作環境ファイルを複写します。
cp php.ini-dist /usr/local/lib/php.ini
注意
PHPのインストールをやりなおす場合、PHPソースのディレクトリを削除して、手順.3からやりなおしてください。
2.1.8 PHP Symfowareのインストール
PHP Symfowareのインストールについて説明します。
PEARを使用しない場合、PEARのセットアップおよびPEAR for Symfowareのインストールの作業は不要です。
PHPlibを使用しない場合、PHPlibのインストール、PHPlibのセットアップおよびPHPlib for Symfowareのインストールの作業は不要で
す。
Symfoware関数のインストール
1. Symfoware関数ソ+ースのアーカイブ(php-symfoware-1.0.0.tar.gz)を入手してください。
2. スーパ・ユーザでログインしてください。
3. Symfoware関数ソースのアーカイブを任意の作業ディレクトリ(ここでは/tmpと仮定します)に置いてください。
4. 以下のコマンドで任意の作業ディレクトリに移動してください。
cd /tmp
5. 以下のコマンドでPHP Symfowareソースを展開してください。
gunzip -c php-symfoware-1.0.0.tar.gz | tar xvf -
6. 以下のコマンドでSyfmoware関数ソースディレクトリに移動してください。
cd /tmp/php-symfoware-1.0.0
7. 以下のコマンドでビルドの準備の初期化を行なってください。
phpize
8. Symfowareをデフォルトのディレクトリ配下にインストールした場合、以下のコマンドでビルドの準備を行なってください。
./configure --with-symfoware
9. Symfowareをデフォルト以外のディレクトリ配下にインストールした場合、以下のコマンドでビルドの準備を行なってください。
./configure --with-symfoware=/インストール先ディレクトリ名
10. 以下のコマンドでSymfoware関数をビルドおよびインストールしてください。
make
11. 以下のコマンドでPHP Symfoware関数モジュールのディレクトリに移動してください。
cd /tmp/php-symfoware-1.0.0/modules
12. 以下のコマンドでPHP Symfoware関数モジュールを複写してください。
cp php_symfoware.so /usr/local/lib/php/extensions
- 6 -
13. 以下のコマンドでPHP動作環境ファイルのディレクトリに移動してください。
cd /usr/local/lib
14. 以下のコマンドでPHP動作環境ファイルを編集してください。
vi php.ini
15. PHP動作環境ファイルに下記のパラメタを設定してください。
extension_dir = /usr/local/lib/php/extensions
extension=php_symfoware.so
PEARのセットアップ
1. スーパ・ユーザでログインしてください。
2. 以下のコマンドでPHP動作環境ファイルのディレクトリに移動してください。
cd /usr/local/lib
3. 以下のコマンドでPHP動作環境ファイルを編集してください。
vi php.ini
4. PHP動作環境ファイルに下記のパラメタを設定してください。複数のディレクトリを指定する場合、コロン(:)で区切って記述しま
す。
include_path = ".:/usr/local/lib/php"
PEAR for Symfowareのインストール
1. PEAR for Symfowareソースのアーカイブ
(pear-symfoware-1.0.0.tar.gz)を入手してください。
2. スーパ・ユーザでログインしてください。
3. PEAR for Symfowareソースのアーカイブを任意の作業ディレクトリ(ここでは/tmpと仮定します)に置いてください。
4. 以下のコマンドで任意の作業ディレクトリに移動してください。
cd /tmp
5. 以下のコマンドでPEARソースを展開してください。
gunzip -c pear-symfoware-1.0.0.tar.gz | tar xvf -
6. 以下のコマンドでPEARソースディレクトリに移動してください。
cd /tmp/pear-symfoware-1.0.0/DB
7. 以下のコマンドでPEARソースを複写してください。
cp -r * /usr/local/lib/php/DB
8. 以下のコマンドでPEARソースディレクトリに移動してください。
cd /usr/local/lib/php
9. 以下のコマンドでPEARソースファイルを編集してください。
vi DB.php
- 7 -
10. PEARソースファイルを下記のように修正してください。
【修正前】
// Find protocol and hostspec
// $dsn => proto(proto_opts)/database
if (preg_match('|^(.+?)¥((.*?)¥)/?(.*?)$|', $dsn, $match)) {
【修正後】
// Find protocol and hostspec
// $dsn => proto(proto_opts)/database
//if (preg_match('|^(.+?)¥((.*?)¥)/?(.*?)$|', $dsn, $match)) {
if ( ($parsed['phptype'] != "symfoware") &&
preg_match('|^(.+?)¥((.*?)¥)/?(.*?)$|', $dsn, $match)) {
PHPlibのインストール
1. オープンソース開発ネットワーク
(http://sourceforge.net/projects/phplib/)から、PHPlibソースのアーカイブ(phplib-7.4-pre1.tar.gz)を入手してください。
2. PHPの参考書籍の著書のサイト
(http://www.geocities.jp/rui_hirokawa/php/php-book2/)から、PHPlibソースパッチのアーカイブ(phplib-patched.tar.gz)を入手し
てください。
3. スーパ・ユーザでログインしてください。
4. 以下のコマンドでPHPライブラリディレクトリに移動してください。
cd /usr/local/lib/php
5. 以下のコマンドでPHPlibソースのディレクトリを作成してください。
mkdir phplib
6. PHPlibソースのアーカイブ、PHPlibソースパッチのアーカイブを任意の作業ディレクトリ(ここでは/tmpと仮定します)に置いてくだ
さい。
7. 以下のコマンドで任意の作業ディレクトリに移動してください。
cd /tmp
8. 以下のコマンドでPHPlibソースを展開してください。
gunzip -c phplib-7.4-pre1.tar.gz | tar xvf -
9. 以下のコマンドでPHPlibソースパッチを展開してください。
gunzip -c phplib-patched.tar.gz | tar xvf -
10. 以下のコマンドでPHPlibソースのディレクトリに移動してください。
cd /tmp/phplib-7.4-pre1/php
11. 以下のコマンドでPHPlibソースを複写してください。
cp -r * /usr/local/lib/php/phplib
12. 以下のコマンドでPHPlibソースパッチのディレクトリに移動してください。
cd /tmp/phplib
- 8 -
13. 以下のコマンドでPHPlibソースパッチを複写してください。
cp session.inc setup.inc user.inc /usr/local/lib/php/phplib
14. 以下のコマンドでPHPlibのディレクトリに移動してください。
cd /usr/local/lib/php/phplib
15. 以下のコマンドでファイル名を変更してください。
mv migrate_to_md5.php3 migrate_to_md5.php
mv prepend.php3 prepend.php
mv table_select_js.php3 table_select_js.php
PHPlibのセットアップ
1. スーパ・ユーザでログインしてください。
2. 以下のコマンドでPHP動作環境ファイルのディレクトリに移動してください。
cd /usr/local/lib
3. 以下のコマンドでPHP動作環境ファイルを編集してください。
vi php.ini
4. PHP動作環境ファイルに下記のパラメタを設定してください。複数のディレクトリを指定する場合、コロン(:)で区切って記述しま
す。
include_path = ".:/usr/local/lib/php/phplib"
register_globals = On
PHPlib for Symfowareのインストール
1. PHPlib for Syfmowareソースのアーカイブ(phplib-symfoware-1.0.0.tar.gz)を入手してください。
2. スーパ・ユーザでログインしてください。
3. PHPlib for Symfowareソースのアーカイブを任意の作業ディレクトリ(ここでは/tmpと仮定します)に置いてください。
4. 以下のコマンドで任意の作業ディレクトリに移動してください。
cd /tmp
5. 以下のコマンドでPHPlib for Symfowareソースを展開してください。
gunzip -c phplib-symfoware-1.0.0.tar.gz | tar xvf -
6. 以下のコマンドでPHPlib for Symfowareソースディレクトリに移動してください。
cd /tmp/phplib-symfoware-1.0.0/php
7. 以下のコマンドでPHPlib for Symfowareソースを複写してください。
cp -r * /usr/local/lib/php/phplib
8. 以下のコマンドでPHPlibのセション機能、認証機能、パーミッション管理機能、ユーザ変数機能で用いるデータベース定義の
ディレクトリに移動してください。
cd /tmp/phplib-symfoware-1.0.0/stuff
9. 以下のPHPlibで用いるデータベース定義のファイルをSymfowareサーバのマシンの任意のディレクトリに複写してください。
- phplib_u_create.sh
- phplib_u_create_database.symfo
- 9 -
- phplib_u_insert_database.symfo
10. Symfowareサーバのマシンに、データベースを作成する権限を持つユーザでログインしてください。
11. データベースを作成する権限を持つユーザの環境変数RDBNAME、LD_LIBRARY_PATH、LD_PRELOADを設定してくださ
い。環境変数RDBNAME、LD_LIBRARY_PATH、LD_PRELOADの詳細は、“RDBユーザーズガイド 応用プログラム開発編”
の“応用プログラムの起動”を参照してください。
12. 以下のPHPlibのセション機能、認証機能、パーミッション管理機能およびユーザ変数機能で用いるデータベース定義のファイル
に記述されている各定義のSQL文を適宜修正してください。
- phplib_u_create.sh
- phplib_u_create_database.symfo
- phplib_u_insert_database.symfo
13. 以下のコマンドでデータベースを作成してください。
sh phplib_u_create.sh
注意
Symfoware関数のインストールをやりなおす場合、Symfoware関数ソースのディレクトリを削除して、手順.3からやりなおしてくだ
さい。
2.1.9 Apacheのセットアップ
Apacheのセットアップについて説明します。
Apacheのセットアップ
1. スーパ・ユーザでログインしてください。
2. 以下のコマンドでApache動作環境ファイルのディレクトリに移動してください。
cd /usr/local/apache/conf
3. 以下のコマンドでApache動作環境ファイルを開いてください。
vi httpd.conf
4. Apache動作環境ファイルの下記のディレクティブの内容を確認してください。
Port 80
ServerName ホスト名
ScriptAlias /cgi-bin/ "/usr/local/apache/cgi-bin/"
5. Apache動作環境ファイルに下記のディレクティブを設定してください。
Alias /example/ "/任意の絶対パス/example/"
6. Apache動作環境ファイルに下記のディレクティプを設定してください。
AddType application/x-httpd-php .php
7. Apacheモジュール版PHPインタプリタを設定する場合、Apache動作環境ファイルの下記のディレクティブの内容を確認してくだ
さい。
LoadModule php4_module libexec/libphp4.so
- 10 -
8. Apache動作環境ファイルにClearModuleListディレクティブが指定されている場合、Apache動作環境ファイルに下記のディレク
ティブを指定してください。
AddModule mod_php4.c
9. コマンドライン版PHPインタプリタを設定する場合、Apache動作環境ファイルに下記のディレクティブを設定してください。
Action application/x-httpd-php /cgi-bin/php
10. Apache設定ファイルに下記のディレクティブを設定してください。
PassEnv LD_LIBRARY_PATH
PassEnv LD_PRELOAD
11. PHPスクリプトからローカルのSymfoware/RDBに対するRDBコマンドを呼び出す場合、Apache動作環境ファイルに下記のディレ
クティブを設定してください。
PassEnv PATH
PassEnv LANG
12. コマンドライン版PHPインタプリタを設定する場合、以下のコマンドでPHPインタプリタのディレクトリに移動してください。
cd /usr/local/bin
13. コマンドライン版PHPインタプリタを設定する場合、以下のコマンドでPHPインタプリタを複写してください。
cp php /usr/local/apache/cgi-bin
14. スーパ・ユーザの環境変数LD_LIBRARY_PATH、LD_PRELOADを設定してください。環境変数LD_LIBRARY_PATH、
LD_PRELOADの詳細は、“RDBユーザーズガイド 応用プログラム開発編”の“応用プログラムの起動”を参照してください。
15. PHPスクリプトからローカルのSymfoware/RDBに対するRDBコマンドを呼び出す場合、スーパ・ユーザの環境変数PATH、LANGを設定してくたざい。環境変数PATH、LANGの詳細は、“スタートガイド サーバ編”の“環境変数の設定”を参照してください。
16. 以下のコマンドでApache起動コマンドのディレクトリに移動してください。
cd /usr/local/apache/bin
17. 以下のコマンドでApache動作環境ファイルの内容の妥当性をチェックしてください。
./apachectl configtest
18. 以下のコマンドでApacheを起動してください。
./apachectl start
注意
Symfoware関数のインストールやApacheのセットアップをやりなおす場合、以下のコマンドでApacheを停止してからセットアップ
をやりなおしてください。restartオプションでApacheを再起動した場合は、環境変数の設定は変更されないことに注意してくださ
い。
./apachectl stop
- 11 -
第3章 PHP Symfowareの使用
本章では、PHPからSymfoware/RDBのデータベースをアクセスする方法について説明します。
3.1 PHPスクリプトの作成および実行
3.2 PHP Symfowareの規約
3.1 PHPスクリプトの作成および実行
PHPスクリプトの作成および実行について説明します。
PHPの動作環境を表示するPHPスクリプトの作成および実行
1. エディタを用いて、PHPの動作環境を表示するPHPスクリプトを作成してください。PHPの動作環境を表示するPHPスクリプトの例
を以下に示します。
<?php phpinfo() ; ?>
2. Apache動作環境ファイルのAliasディレクティブで指定した絶対パスのディレクトリにPHPスクリプトのファイルを置いてください。PHPスクリプトのファイル名の拡張子は“.php”を指定してください。
3. Apache動作環境ファイルのPortディレクティブでポート番号80を指定した場合、WWWブラウザのURLテキストボックスに下記の
URLを指定し、PHPスクリプトを実行してください。
http://WWWサーバのホスト名/example/~.php
4. Apache動作環境ファイルのPortディレクティブでポート番号80以外を指定した場合、WWWブラウザのURLテキストボックスに下記の
URLを指定し、PHPスクリプトを実行してください。
http://WWWサーバのホスト名:ポート番号/example/~.php
PHPスクリプトの作成および実行
1. PHPスクリプトからアクセスするデータベースを作成してください。データベースの作成方法の詳細は、“RDB管理者ガイド”と“RDBユーザーズガイド データベース定義編”を参照してください。 SPCL="PHP"
2. エディタを用いて、PHPスクリプトを作成してください。PHPスクリプトの簡単な例を以下に示します。
<HTML>
<BODY>
<PRE>
<?php
putenv( "RDBNAME=rdbsys1" ) ;
$connection_id = symfoware_connect( "RDBDB", "rdbmng", "******" ) ;
$result_id = symfoware_prepare( $connection_id, "SELECT * FROM STOCKS.STOCK" ) ;
symfoware_execute( $result_id ) ;
while( symfoware_fetch_row( $result_id ) ) {
for( $x = 1 ; $x <= symfoware_num_fields( $result_id ) ; $x ++ ) {
if( $x != 1 ) printf( " " ) ;
printf( "%s", symfoware_result( $result_id,$x ) ) ;
}
printf( "¥n" ) ;
}
symfoware_close( $connection_id ) ;
?>
</PRE>
</BODY>
</HTML>
- 12 -
3. 必要に応じて、PHPスクリプトでputenv関数を用いて、環境変数RDBCHARSET、RDBNCHARにPHPスクリプトの文字コードを
指定してください。環境変数RDBCHARSET、RDBNCHARの詳細は、“RDBユーザーズガイド 応用プログラム開発編”の“環境
変数”を参照してください。
4. ローカルのSymfoware/RDBに接続する場合、PHPスクリプトでputenv関数を用いて、環境変数RDBNAMEにRDBシステム名を
指定してください。省略した場合、RDB名なしのRDBシステムに接続します。環境変数RDBNAMEの詳細は、“RDBユーザーズ
ガイド 応用プログラム開発編”の応用プログラムの起動を参照してください。
5. リモートのSymfoware/RDBに接続する場合、Symfoware Serverのリモートアクセスの設定とRDBシステムの再起動を行う必要が
あります。リモートアクセスの設定の詳細は、“スタートガイドサーバ編”の“RDBのセットアップ”と“システム用の動作環境ファイル
による定義”の“MAX_CONNECT_TCP”を参照してください。
6. Apache動作環境ファイルのAliasディレクティブで指定した絶対パスのディレクトリにPHPスクリプトのファイルを置いてください。PHPスクリプトのファイル名の拡張子は“.php”を指定してください。
7. Apache動作環境ファイルのPortディレクティブでポート番号80を指定した場合、WWWブラウザのURLテキストボックスに下記の
URLを指定し、PHPスクリプトを実行してください。
http://WWWサーバのホスト名/example/~.php
8. Apache動作環境ファイルのPortディレクティブでポート番号80以外を指定した場合、WWWブラウザのURLテキストボックスに下記の
URLを指定し、PHPスクリプトを実行してください。
http://WWWサーバのホスト名:ポート番号/example/~.php
3.2 PHP Symfowareの規約
PHP Symfowareの規約について説明します。
3.2.1 PHP Symfowareの仕様
PHP Symfowareの仕様について説明します。
PHP Symfowareの仕様
PHPのデータベースアクセスに関して書籍などの参考資料が出ており、データベースアクセスの仕様を規定しています。PHP Symfowareでは、これらの機能に対応させた機能を用意していますが、仕様が異なる箇所があります。
本マニュアルでは、PHP Symfowareの詳細な仕様を規定しています。書籍などの参考資料のデータベースアクセス仕様と異なる箇所
があります。
3.2.2 変数の規約
変数の規約について説明します。
変数の規約
PHPスクリプトの変数は、変数名の先頭に必ず$記号を付けます。
$value
先頭の$は、単一の値を保持することを表します。
$value[要素番号]
変数名の後ろの“[要素番号]”は、複数の値を要素番号で対応付けて値を保持することを表します。
$value["要素名"]
変数名の後ろの“["要素名"]”は、複数の値を要素名で対応付けて値を保持することを表します。これを連想配列と呼びます。連想配
列のことをハッシュとも呼びます。
- 13 -
3.2.3 真、偽
真、偽について説明します。
真、TRUE
TRUEとは、0以外の値(一般には1であることが多いです)を表します。
PHPスクリプト中で、変数にTRUEを設定するときは $value = TRUE ; で行い、変数の値がTRUEであることを判定するときは if( $value ) { }で行います。
偽、FALSE
FALSEとは、0、"0"または空文字列を表します。
PHPスクリプト中で、変数にFALSEを設定するときは $value = FALSE ; で行い、変数の値がFALSEであることを判定するときは if( !$value ) { } で行います。
3.2.4 SQL文の規約
SQL文の規約について説明します。
使用できるSQL文
使用できるSQL文を以下に示します。
使用できるSQLの文、要素および機能については、“SQLリファレンスガイド”の“SQLと関数の一覧”を参照してください。
それぞれのSQL文の詳細については、“SQLリファレンスガイド”に記載されている各SQL文の説明記事を参照してください。
・ 動的SELECT文
・ INSERT文
・ UPDATE文:探索
・ UPDATE文:位置付け
・ DELETE文:探索
・ DELETE文:位置付け
・ スキーマ定義文
・ スキーマ操作文
・ 格納構造定義文
・ 格納構造操作文
・ 利用者制御文
・ アクセス制御文
・ システム制御文
・ CALL文(ただし、パラメタモードがINのみ)
・ SET SCHEMA文
・ SET TRANSACTION文
Symfoware関数において、動的SELECT文、INSERT文、UPDATE文:探索、UPDATE文:位置付け、DELETE文:探索およびCALL文に、動的パラメタを指定し、動的パラメタに対応する値を指定することができます。
PEARにおいて、動的SELECT文、INSERT文、UPDATE文:探索、UPDATE文:位置付け、DELETE文:探索およびCALL文に、動的
パラメタを指定することはできませんが、動的パラメタに相当する代替機能が用意されています。
動的パラメタの詳細は、“SQLリファレンスガイド”の“値指定と相手指定”を参照してください。
- 14 -
表定義、インデックス定義に格納領域指定が省略されている場合、格納領域指定を付加します。格納領域指定を付加をするか否か
を変更する場合、データソース名のパラメタに“CLI_STORAGE_AREA_AUTO_SET”を指定してください。データソース名の詳細
は、“4.2.8 symfoware_connect”の“パラメタ”を参照してください。
格納領域指定の詳細は、“SQLリファレンスガイド”の“CREATE TABLE文(表定義)”、“CREATE INDEX文(インデックス定義)”を参
照してください。
- 15 -
第4章 Symfoware関数の仕様
本章では、Symfoware関数を用いてSymfoware/RDBのデータベースをアクセスするときの仕様について説明します。
4.1 Symfoware関数の概要
4.2 Symfoware関数
4.1 Symfoware関数の概要
Symfoware関数の概要について説明します
4.1.1 Symfoware関数のスクリプト例
Symfoware関数のスクリプト例について説明します。
Symfoware関数のスクリプト例
本項の例は、主に以下のPHPスクリプトをベースにしたものを用いています。以下のPHPスクリプトを実行させるためには、ユー
ザ“rdbmng”がデータベース“RDBDB”、データベーススペース“DBSP1”およびスキーマ“STOCKS”を定義しておく必要があります。
<HTML>
<BODY>
<PRE>
// 1.
$connection_id = symfoware_connect( "RDBDB", "rdbmng", "******" ) or die( symfoware_errormsg() ) ;
// 2.
@symfoware_exec( $connection_id, "DROP TABLE STOCKS.STOCK CASCADE" ) ;
symfoware_exec( $connection_id, "CREATE TABLE STOCKS.STOCK ( PRODUCT_NUMBER INTEGER NOT NULL,
PRODUCT_NAME CHAR(20) NOT NULL, STOCK_QUANTITY INTEGER, WAREHOUSE_NUMBER SMALLINT NOT NULL ) ON
DBSP1" ) or die( symfoware_errormsg( $connection_id ) ) ;
symfoware_exec( $connection_id, "INSERT INTO STOCKS.STOCK VALUES( 140, 'cassette deck', 120, 2 )" )
or die( symfoware_errormsg( $connection_id ) ) ;
symfoware_exec( $connection_id, "INSERT INTO STOCKS.STOCK VALUES( 110, 'television', 85, 2 )" ) or
die( symfoware_errormsg( $connection_id ) ) ;
// 3.
$result_id = symfoware_prepare( $connection_id, "SELECT * FROM STOCKS.STOCK" ) or
die( symfoware_errormsg( $connection_id ) ) ;
// 4.
symfoware_execute( $result_id ) ;
// 5.
while( symfoware_fetch_row( $result_id ) ) {
for( $x = 1 ; $x <= symfoware_num_fields( $result_id ) ; $x ++ ) {
if( $x != 1 ) printf( " " ) ;
printf( "%s", symfoware_result( $result_id, $x ) ) ;
}
printf( "¥n" ) ;
}
// 6.
symfoware_close( $connection_id ) ;
?>
</PRE>
</BODY>
</HTML>
1. データベースに接続し、接続ID“connection_id”を取得します。接続IDが取得できないときは、例外を発行します。
2. 接続ID“connection_id”を用いて、SQL文を実行します。復帰値が正常でないときは、例外を発行します。
- 16 -
3. 接続ID“connection_id”を用いて、SQL文を準備し、結果ID“result_id”を取得します。結果IDが取得できないときは、例外を発
行します。
4. 結果ID“result_id”を用いて、SQL文を実行します。
5. 結果ID“result_id”を用いてフェッチします。
6. 接続ID“connection_id”を用いて、データベースの接続を切断します。復帰値が正常でないときは、例外を発行します。
上記の他に、Symfoware関数は豊富なインタフェースを持っています。
4.2 Symfoware関数
Symfoware関数について説明します。
4.2.1 symfoware_autocommit
説明
symfoware_autocommitは、自動的にコミットとするか否を設定し、復帰値を返却します。
デフォルトは自動的にコミットします。
構文
int symfoware_autocommit( int connection_id [, int OnOff ] ) ;
パラメタ
connection_id :
接続IDを指定してください。
OnOff :
自動的にコミットする場合、TRUEを指定してください。
自動的にコミットしない場合、FALSEを指定してください。
自動的にコミットするか否かを得る場合、省略してください。
戻り値
自動的にコミットする場合、TRUEが返却されます。
自動的にコミットしない場合、FALSEが返却されます。
異常の場合、FALSEが返却されます。
例
<HTML>
<BODY>
<PRE>
<?php
$connection_id = symfoware_connect( "RDBDB", "rdbmng", "******" ) or die( symfoware_errormsg() ) ;
@symfoware_exec( $connection_id, "DROP TABLE STOCKS.STOCK CASCADE" ) ;
symfoware_exec( $connection_id, "CREATE TABLE STOCKS.STOCK ( PRODUCT_NUMBER INTEGER NOT NULL,
PRODUCT_NAME CHAR(20) NOT NULL, STOCK_QUANTITY INTEGER, WAREHOUSE_NUMBER SMALLINT NOT NULL ) ON
DBSP1" ) or die( symfoware_errormsg( $connection_id ) ) ;
printf( "AutoCommit : %s¥n", symfoware_autocommit( $connection_id ) ? "true" : "false" ) ;
symfoware_autocommit( $connection_id, FALSE ) ;
printf( "AutoCommit : %s¥n", symfoware_autocommit( $connection_id ) ? "true" : "false" ) ;
symfoware_exec( $connection_id, "INSERT INTO STOCKS.STOCK VALUES( 140, 'cassette deck', 120, 2 )" )
or die( symfoware_errormsg( $connection_id ) ) ;
symfoware_commit( $connection_id ) ;
- 17 -
symfoware_exec( $connection_id, "INSERT INTO STOCKS.STOCK VALUES( 110, 'television', 85, 2 )" ) or
die( symfoware_errormsg( $connection_id ) ) ;
symfoware_rollback( $connection_id ) ;
symfoware_autocommit( $connection_id, TRUE ) ;
$result_id = symfoware_prepare( $connection_id, "SELECT * FROM STOCKS.STOCK" ) or
die( symfoware_errormsg( $connection_id ) ) ;
symfoware_execute( $result_id ) ;
while( symfoware_fetch_row( $result_id ) ) {
for( $x = 1 ; $x <= symfoware_num_fields( $result_id ) ; $x ++ ) {
if( $x != 1 ) printf( " " ) ;
printf( "%s", symfoware_result( $result_id, $x ) ) ;
}
printf( "¥n" ) ;
}
symfoware_close( $connection_id ) ;
?>
</PRE>
</BODY>
</HTML>
4.2.2 symfoware_binmode
説明
symfoware_binmodeは、BLOB型の列から読み込むバイナリデータの処理方法を設定し、復帰値を返却します。
バイナリデータの処理方法の省略値は、バイナリデータそのままとします。
構文
int symfoware_binmode( int result_id, int binary_mode ) ;
パラメタ
result_id :
結果IDを指定してください。
新規の結果のデフォルト値とする場合、0を指定してください。
binary_mode :
バイナリデータをそのまま出力に渡す場合、SYMFOWARE_BINMODE_PASSTHRUを指定してください。
バイナリデータそのままとする場合、SYMFOWARE_BINMODE_RETURNを指定してください。
16進文字表記の文字列とする場合、SYMFOWARE_BINMODE_CONVERTを指定してください。
戻り値
TRUEが返却されます。
異常の場合、FALSEが返却されます。
例
<HTML>
<BODY>
<PRE>
<?php
$connection_id = symfoware_connect( "RDBDB", "rdbmng", "******" ) or die( symfoware_errormsg() ) ;
@symfoware_exec( $connection_id, "DROP TABLE STOCKS.SLIP CASCADE" ) ;
symfoware_exec( $connection_id, "CREATE TABLE STOCKS.SLIP ( ORDER_NUMBER INTEGER, ORDER_SLIP
BLOB(64K) ) ON DBSP1" ) or die( symfoware_errormsg( $connection_id ) ) ;
$result_id = symfoware_prepare( $connection_id, "INSERT INTO STOCKS.SLIP VALUES( ?, ? )" ) ;
$params = array( 140, "<?xml version='1.0' ?><SLIP><NUMBER>140</NUMBER><NAME>cassette deck</NAME></
- 18 -
SLIP>" ) ;
symfoware_execute( $result_id, $params ) or die( symfoware_errormsg() ) ;
$params = array( 110, "<?xml version='1.0' ?><SLIP><NUMBER>110</NUMBER><NAME>television</NAME></
SLIP>" ) ;
symfoware_execute( $result_id, $params ) or die( symfoware_errormsg() ) ;
$result_id = symfoware_prepare( $connection_id, "SELECT * FROM STOCKS.SLIP" ) or
die( symfoware_errormsg( $connection_id ) ) ;
symfoware_binmode( $result_id, SYMFOWARE_BINMODE_RETURN ) ;
symfoware_execute( $result_id ) ;
while( symfoware_fetch_row( $result_id ) ) {
for( $x = 1 ; $x <= symfoware_num_fields( $result_id ) ; $x ++ ) {
if( $x != 1 ) printf( " " ) ;
printf( "%s", symfoware_result( $result_id, $x ) ) ;
}
printf( "¥n" ) ;
}
symfoware_close( $connection_id ) ;
?>
</PRE>
</BODY>
</HTML>
XML文書を返却する
<?php
header( "content-type: text/xml" ) ;
$connection_id = symfoware_connect( "RDBDB", "rdbmng", "******" ) or die( symfoware_errormsg() ) ;
@symfoware_exec( $connection_id, "DROP TABLE STOCKS.SLIP CASCADE" ) ;
symfoware_exec( $connection_id, "CREATE TABLE STOCKS.SLIP ( ORDER_NUMBER INTEGER, ORDER_SLIP
BLOB(64K) ) ON DBSP1" ) or die( symfoware_errormsg( $connection_id ) ) ;
$result_id = symfoware_prepare( $connection_id, "INSERT INTO STOCKS.SLIP VALUES( ?, ? )" ) ;
$params = array( 140, "<?xml version='1.0' ?><SLIP><NUMBER>140</NUMBER><NAME>cassette deck</NAME></
SLIP>" ) ;
symfoware_execute( $result_id, $params ) or die( symfoware_errormsg() ) ;
$params = array( 110, "<?xml version='1.0' ?><SLIP><NUMBER>110</NUMBER><NAME>television</NAME></
SLIP>" ) ;
symfoware_execute( $result_id, $params ) or die( symfoware_errormsg() ) ;
$result_id = symfoware_prepare( $connection_id, "SELECT ORDER_SLIP FROM STOCKS.SLIP WHERE
ORDER_NUMBER = 140" ) or die( symfoware_errormsg( $connection_id ) ) ;
symfoware_binmode( $result_id, SYMFOWARE_BINMODE_PASSTHRU ) ;
symfoware_execute( $result_id ) ;
symfoware_fetch_row( $result_id ) ;
symfoware_result( $result_id, 1 ) ;
symfoware_close( $connection_id ) ;
?>
4.2.3 symfoware_close
説明
symfoware_closeは、データベースを切断します。
トランザクションが開始されている場合、データベースの切断に失敗し、データベースに接続されたままとなります。
構文
void symfoware_close( int connection_id ) ;
パラメタ
connection_id :
接続IDを指定してください。
- 19 -
例
“4.2.8 symfoware_connect”の“例”を参照してください。
4.2.4 symfoware_close_all
説明
symfoware_close_allは、すべてのデータベースを切断します。
トランザクションが開始されている場合、データベースの切断に失敗し、データベースに接続されたままとなります。
構文
void symfoware_close_all( void ) ;
4.2.5 symfoware_columnprivileges
説明
symfoware_columnprivilegesは未サポートです。
symfoware_columnprivilegesを使用したときの動作は不定です。
4.2.6 symfoware_columns
説明
symfoware_columnsは、データベース中に存在するユーザが作成した表、ビュー表または一時表の列に関する情報を取得するための結果
IDを返却します。
構文
int symfoware_columns( int connection_id [, string database_name [, string schema_name [, string table_name [, stringcolumn_name ] ] ] ] ) ;
パラメタ
connection_id :
接続IDを指定してください。
database_name :
データベース名を指定してください。
データベース名に検索パターン文字を指定することができます。0個以上の文字に合致させる場合は"%"を指定してください。
schema_name :
スキーマ名を指定してください。
スキーマ名に検索パターン文字を指定することができます。0個以上の文字に合致させる場合は"%"を指定してください。
table_name :
表名、ビュー表名または一時表名を指定してください。
表名に検索パターン文字を指定することができます。0個以上の文字に合致させる場合は"%"を指定してください。
column_name :
列名を指定してください。
列名に検索パターン文字を指定することができます。0個以上の文字に合致させる場合は"%"を指定してください。
- 20 -
戻り値
結果IDが返却されます。結果IDをフェッチすることにより、列に関する情報を得ることができます。情報の列番号と値を以下に示しま
す。
列番号 値
1 データベース名が設定されます。
2 スキーマ名が設定されます。
3 表名、ビュー表名、一時表名が設定されます。
4 列名が設定されます
5 SQLデータ型番号が設定されます。
6 データ型を表す文字列が設定されます。
7 真数の場合、10進数での桁数が設定されます。
概数の場合、ビット数が設定されます。
文字列型、各国語文字列型の場合、 大文字数が
設定されます。
日時型の場合、 大文字数が設定されます。
時間隔型の場合、 大文字数が設定されます。
BLOB型の場合、 大バイト数が設定されます。
8 データ長が設定されます。
9 位取りが設定されます。
10 真数の場合、10が設定されます。
概数の場合、2が設定されます。
真数、概数以外の場合、NULLが設定されます。
11 NULLを持つ可能性がある場合、TRUEが設定され
ます。
NULLを持つ可能性がない場合、FALSEが設定さ
れます。
12 NULLが設定されます。
13 列にデフォルト値が設定されている場合、デフォルト
値が設定されます。
列にデフォルト値が設定されていない場合、NULLが設定されます。
14 日時型の場合、9が設定されます。
時間隔型の場合、10が設定されます。
日時型、時間隔型以外の場合、SQLデータ型番号
が設定されます。
15 DATE型の場合、1が設定されます。
TIME型の場合、2が設定されます。
TIMESTAMP型の場合、3が設定されます。
日時型、時間隔型以外の場合、NULLが設定されま
す。
16 文字型の場合、文字数が設定されます。
文字列型以外の場合、NULLが設定されます。
- 21 -
列番号 値
17 列番号が設定されます。
18 NULLを持つ可能性がある場合、"YES"が設定され
ます。
NULLを持つ可能性がない場合、"NO"が設定され
ます。
異常の場合、FALSEが返却されます。
例
<HTML>
<BODY>
<PRE>
<?php
$connection_id = symfoware_connect( "RDBDB", "rdbmng", "******" ) or die( symfoware_errormsg() ) ;
@symfoware_exec( $connection_id, "DROP TABLE STOCKS.STOCK CASCADE" ) ;
@symfoware_exec( $connection_id, "DROP TABLE STOCKS.STOCK_T CASCADE" ) ;
symfoware_exec( $connection_id, "CREATE TABLE STOCKS.STOCK ( PRODUCT_NUMBER INTEGER NOT NULL,
PRODUCT_NAME CHAR(20) NOT NULL, STOCK_QUANTITY INTEGER, WAREHOUSE_NUMBER SMALLINT NOT NULL ) ON
DBSP1" ) or die( symfoware_errormsg( $connection_id ) ) ;
symfoware_exec( $connection_id, "CREATE VIEW STOCKS.STOCK_V COMMENT 'VIEW' AS SELECT PRODUCT_NUMBER,
PRODUCT_NAME FROM STOCKS.STOCK WHERE PRODUCT_NAME = 'cassette deck'" ) or
die( symfoware_errormsg( $connection_id ) ) ;
symfoware_exec( $connection_id, "CREATE GLOBAL TEMPORARY TABLE STOCKS.STOCK_T ( PRODUCT_NUMBER
INTEGER NOT NULL, PRODUCT_NAME CHAR(20) NOT NULL, STOCK_QUANTITY INTEGER, WAREHOUSE_NUMBER SMALLINT
NOT NULL ) ON COMMIT PRESERVE ROWS COMMENT 'VIEW' ON DBSP1 2" ) or
die( symfoware_errormsg( $connection_id ) ) ;
$result_id = symfoware_columns( $connection_id, "RDBDB", "STOCKS", "STOCK%", "PRODUCT_%" ) ;
if( ! $result_id ) {
symfoware_errormsg( $connection_id ) ;
}
$c = 0 ;
while( symfoware_fetch_row( $result_id ) ) {
$c ++ ;
printf( "(%d)¥n", $c ) ;
printf( "TABLE_CAT : %s¥n", symfoware_result( $result_id, 1 ) ) ;
printf( "TABLE_SCHEM : %s¥n", symfoware_result( $result_id, 2 ) ) ;
printf( "TABLE_NAME : %s¥n", symfoware_result( $result_id, 3 ) ) ;
printf( "COLUMN_NAME : %s¥n", symfoware_result( $result_id, 4 ) ) ;
printf( "DATA_TYPE : %d¥n", symfoware_result( $result_id, 5 ) ) ;
printf( "TYPE_NAME : %s¥n", symfoware_result( $result_id, 6 ) ) ;
printf( "COLUNN_SIZE : %d¥n", symfoware_result( $result_id, 7 ) ) ;
printf( "LENGTH : %d¥n", symfoware_result( $result_id, 8 ) ) ;
printf( "SCALE : %d¥n", symfoware_result( $result_id, 9 ) ) ;
printf( "NUM_PREC_RADIX : " . ( symfoware_isnull( $result_id, 10 ) ? "%s¥n" : "%d¥n" ),
symfoware_isnull( $result_id, 10 ) ? "NULL" : symfoware_result( $result_id, 10 ) ) ;
printf( "NULLABLE : %s¥n", symfoware_result( $result_id, 11 ) ) ;
printf( "REMARKS : %s¥n", symfoware_isnull( $result_id, 12 ) ? "NULL" :
symfoware_result( $result_id, 12 ) ) ;
printf( "COLUMN_DEF : %s¥n", symfoware_isnull( $result_id, 13 ) ? "NULL" :
symfoware_result( $result_id, 13 ) ) ;
printf( "SQL_DATA_TYPE : %d¥n", symfoware_result( $result_id, 14 ) ) ;
printf( "SQL_DATETIME_SUB : " . ( symfoware_isnull( $result_id, 15 ) ? "%s¥n" : "%d¥n" ),
symfoware_isnull( $result_id, 15 ) ? "NULL" : symfoware_result( $result_id, 15 ) ) ;
printf( "CHAR_OCTET_LENGTH : " . ( symfoware_isnull( $result_id, 16 ) ? "%s¥n" : "%d¥n" ),
symfoware_isnull( $result_id, 16 ) ? "NULL" : symfoware_result( $result_id, 16 ) ) ;
printf( "ORDINAL_POSITION : %d¥n", symfoware_result( $result_id, 17 ) ) ;
printf( "IS_NULLABLE : %s¥n", symfoware_result( $result_id, 18 ) ) ;
}
symfoware_close( $connection_id ) ;
- 22 -
?>
</PRE>
</BODY>
</HTML>
4.2.7 symfoware_commit
説明
symfoware_commitは、データベースをコミットし、復帰値を返却します。
構文
int symfoware_commit( int connection_id ) ;
パラメタ
connection_id :
接続IDを指定してください。
戻り値
TRUEが返却されます。
異常の場合、FALSEが返却されます。
例
“4.2.1 symfoware_autocommit”の“例”を参照してください。
4.2.8 symfoware_connect
説明
symfoware_connectは、データベースに接続し、接続IDを返却します。
構文
int symfoware_connect( string data_source, string user_name, string password [ , int mode ] ) ;
パラメタ
$data_source :
データソース名を指定してください。
Symfoware/RDBにローカルアクセスする場合、"データベース名"または"データベース名;パラメタ"を指定してください。
Symfoware/RDBにリモートアクセスする場合、"データベース名,ホスト名,ポート番号"または"データベース名,ホスト名,ポート番号;パラ
メタ"を指定してください。
パラメタについては、“付録A connect、pconnectのパラメタの記述形式”を参照してください。
user_name :
認可識別子を指定してください。
password :
パスワードを指定してください。
mode :
SQL_CUR_USE_DRIVERを指定してください。
- 23 -
SQL_CUR_USE_IF_NEEDED、SQL_CUR_USE_ODBC、SQL_CUR_USE_DEFAULTは未サポートです。使用したときの動作は不
定です。
戻り値
接続IDが返却されます。
異常の場合、FALSEが返却されます。
例
<HTML>
<BODY>
<PRE>
<?php
$connection_id = symfoware_connect( "RDBDB", "rdbmng", "******" ) ;
if( ! $connection_id ) {
die( symfoware_errormsg() ) ;
}
@symfoware_exec( $connection_id, "DROP TABLE STOCKS.STOCK CASCADE" ) ;
symfoware_exec( $connection_id, "CREATE TABLE STOCKS.STOCK ( PRODUCT_NUMBER INTEGER NOT NULL,
PRODUCT_NAME CHAR(20) NOT NULL, STOCK_QUANTITY INTEGER, WAREHOUSE_NUMBER SMALLINT NOT NULL ) ON
DBSP1" ) or die( symfoware_errormsg( $connection_id ) ) ;
symfoware_exec( $connection_id, "INSERT INTO STOCKS.STOCK VALUES( 140, 'cassette deck', 120, 2 )" )
or die( symfoware_errormsg( $connection_id ) ) ;
symfoware_exec( $connection_id, "INSERT INTO STOCKS.STOCK VALUES( 110, 'television', 85, 2 )" ) or
die( symfoware_errormsg( $connection_id ) ) ;
$result_id = symfoware_prepare( $connection_id, "SELECT * FROM STOCKS.STOCK" ) or
die( symfoware_errormsg( $connection_id ) ) ;
symfoware_execute( $result_id ) ;
while( symfoware_fetch_row( $result_id ) ) {
for( $x = 1 ; $x <= symfoware_num_fields( $result_id ) ; $x ++ ) {
if( $x != 1 ) printf( " " ) ;
printf( "%s", symfoware_result( $result_id, $x ) ) ;
}
printf( "¥n" ) ;
}
symfoware_close( $connection_id ) ;
?>
</PRE>
</BODY>
</HTML>
4.2.9 symfoware_cursor
説明
symfoware_cursorは、カーソル名を返却します。
構文
string symfoware_cursor( int result_id ) ;
パラメタ
result_id :
結果IDを指定してください。
戻り値
カーソル名が返却されます。
- 24 -
例
<HTML>
<BODY>
<PRE>
<?php
$connection_id = symfoware_connect( "RDBDB", "rdbmng", "******" ) or die( symfoware_errormsg() ) ;
@symfoware_exec( $connection_id, "DROP TABLE STOCKS.STOCK CASCADE" ) ;
$result_id = symfoware_prepare( $connection_id, "CREATE TABLE STOCKS.STOCK ( PRODUCT_NUMBER INTEGER
NOT NULL, PRODUCT_NAME CHAR(20) NOT NULL, STOCK_QUANTITY INTEGER, WAREHOUSE_NUMBER SMALLINT NOT
NULL ) ON DBSP1" ) or die( symfoware_errormsg( $connection_id ) ) ;
symfoware_execute( $result_id ) ;
printf( "cursor : %s¥n", symfoware_cursor( $result_id ) ) ;
$result_id = symfoware_prepare( $connection_id, "INSERT INTO STOCKS.STOCK VALUES( ?, ?, ?, ? )" ) or
die( symfoware_errormsg( $connection_id ) ) ;
$params = array( 140, "cassette deck", 120, 2 ) ;
symfoware_execute( $result_id, $params ) or die( symfoware_errormsg( $connection_id ) ) ;
$params = array( 110, "television", 85, 2 ) ;
symfoware_execute( $result_id, $params ) or die( symfoware_errormsg( $connection_id ) ) ;
printf( "cursor : %s¥n", symfoware_cursor( $result_id ) ) ;
$result_id = symfoware_prepare( $connection_id, "SELECT * FROM STOCKS.STOCK" ) or
die( symfoware_errormsg( $connection_id ) ) ;
symfoware_execute( $result_id ) ;
printf( "cursor : %s¥n", symfoware_cursor( $result_id ) ) ;
while( symfoware_fetch_row( $result_id ) ) {
for( $x = 1 ; $x <= symfoware_num_fields( $result_id ) ; $x ++ ) {
if( $x != 1 ) printf( " " ) ;
printf( "%s", symfoware_result( $result_id, $x ) ) ;
}
printf( "¥n" ) ;
}
symfoware_close( $connection_id ) ;
?>
</PRE>
</BODY>
</HTML>
4.2.10 symfoware_do
説明
symfoware_doは、symfoware_execの同義語です。
“4.2.13 symfoware_exec”を参照してください。
4.2.11 symfoware_error
説明
symfoware_errorは、直近のSQLSTATEを返却します。
SQLSTATEはデータベースアクセスの状態を5バイトの文字列で表します。
SQLSTATEの詳細は、“SQLリファレンスガイド”の“SQLSTATE”を参照してください。
構文
string symfoware_error( [ int connection_id ] ) ;
パラメタ
connection_id :
接続IDを指定してください。
- 25 -
他の接続を含めた直近のSQLSTATEを得る場合、省略してください。
戻り値
SQLSTATEが返却されます。
エラーが発生していない場合、空文字列が返却されます。
例
<HTML>
<BODY>
<PRE>
<?php
$connection_id = symfoware_connect( "RDBDB", "rdbmng", "******" ) or die( symfoware_errormsg() ) ;
// normal
printf( "error : %s¥n", symfoware_error() ) ;
printf( "errormsg : %s¥n", symfoware_errormsg() ) ;
@symfoware_exec( $connection_id, "DROP TABLE STOCKS.STOCK CASCADE" ) ;
symfoware_exec( $connection_id, "CREATE TABLE STOCKS.STOCK ( PRODUCT_NUMBER INTEGER NOT NULL,
PRODUCT_NAME CHAR(20) NOT NULL, STOCK_QUANTITY INTEGER, WAREHOUSE_NUMBER SMALLINT NOT NULL ) ON
DBSP1" ) or die( symfoware_errormsg( $connection_id ) ) ;
symfoware_exec( $connection_id, "INSERT INTO STOCKS.STOCK VALUES( 140, 'cassette deck', 120, 2 )" )
or die( symfoware_errormsg( $connection_id ) ) ;
symfoware_exec( $connection_id, "INSERT INTO STOCKS.STOCK VALUES( 110, 'television', 85, 2 )" ) or
die( symfoware_errormsg( $connection_id ) ) ;
@symfoware_exec( $connection_id, "INSERT -- ILLEGAL" ) ;
// error
printf( "error : %s¥n", symfoware_error( $connection_id ) ) ;
printf( "errormsg : %s¥n", symfoware_errormsg( $connection_id ) ) ;
$result_id = symfoware_prepare( $connection_id, "SELECT * FROM STOCKS.STOCK" ) or
die( symfoware_errormsg( $connection_id ) ) ;
symfoware_execute( $result_id ) ;
while( symfoware_fetch_row( $result_id ) ) {
for( $x = 1 ; $x <= symfoware_num_fields( $result_id ) ; $x ++ ) {
if( $x != 1 ) printf( " " ) ;
printf( "%s", symfoware_result( $result_id, $x ) ) ;
}
printf( "¥n" ) ;
}
// normal
printf( "error : %s¥n", symfoware_error( $connection_id ) ) ;
printf( "errormsg : %s¥n", symfoware_errormsg( $connection_id ) ) ;
$result_id = symfoware_prepare( $connection_id, "SELECT 300 / ( PRODUCT_NUMBER - 110 ) FROM
STOCKS.STOCK" ) or die( symfoware_errormsg( $connection_id ) ) ;
symfoware_execute( $result_id ) ;
while( symfoware_fetch_row( $result_id ) ) {
for( $x = 1 ; $x <= symfoware_num_fields( $result_id ) ; $x ++ ) {
if( $x != 1 ) printf( " " ) ;
printf( "%s", symfoware_result( $result_id, $x ) ) ;
}
printf( "¥n" ) ;
}
// zero divide
printf( "error : %s¥n", symfoware_error( $connection_id ) ) ;
printf( "errormsg : %s¥n", symfoware_errormsg( $connection_id ) ) ;
symfoware_exec( $connection_id, "DELETE FROM STOCKS.STOCK" ) or
die( symfoware_errormsg( $connection_id ) ) ;
// normal
printf( "error : %s¥n", symfoware_error( $connection_id ) ) ;
printf( "errormsg : %s¥n", symfoware_errormsg( $connection_id ) ) ;
symfoware_exec( $connection_id, "DELETE FROM STOCKS.STOCK" ) ;
// no record
- 26 -
printf( "error : %s¥n", symfoware_error( $connection_id ) ) ;
printf( "errormsg : %s¥n", symfoware_errormsg( $connection_id ) ) ;
symfoware_close( $connection_id ) ;
?>
</PRE>
</BODY>
</HTML>
4.2.12 symfoware_errormsg
説明
symfoware_errormsgは、直近のSQLMSGを返却します。
SQLMSGは、データベースアクセスのエラーメッセージの文字列です。SQLMSGの詳細は、“まえがき”の“Symfoware/RDBが出力す
るメッセージの処置を参照する”を参照してください。
構文
string symfoware_errormsg( [ int connection_id ] ) ;
パラメタ
connection_id :
接続IDを指定してください。
他の接続を含めた直近のSQLMSGを得る場合、省略してください。
戻り値
SQLMSGが返却されます。
エラーが発生していない場合、空文字列が返却されます。
例
“4.2.11 symfoware_error”の“例”を参照してください。
4.2.13 symfoware_exec
説明
symfoware_execは、SQL文を準備、実行し、結果IDを返却します。
構文
int symfoware_exec( int connection_id, string statement ) ;
パラメタ
connection_id :
接続IDを指定してください。
statement :
SQL文を指定してください。
戻り値
結果IDが返却されます。
異常の場合、FALSEが返却されます。
- 27 -
例
“4.2.8 symfoware_connect”の“例”を参照してください。
4.2.14 symfoware_execute
説明
symfoware_executeは、準備されたSQL文を実行し、復帰値を返却します。
構文
int symfoware_execute( int result_id [, array params ] ) ;
パラメタ
result_id :
結果IDを指定してください。
params :
動的パラメタに対応する値の配列を指定してください。
戻り値
TRUEが返却されます。
異常の場合、FALSEが返却されます。
例
<HTML>
<BODY>
<PRE>
<?php
$connection_id = symfoware_connect( "RDBDB", "rdbmng", "******" ) or die( symfoware_errormsg() ) ;
$result_id = symfoware_prepare( $connection_id, "DROP TABLE STOCKS.STOCK CASCADE" ) or
die( symfoware_errormsg( $connection_id ) ) ;
@symfoware_execute( $result_id ) ;
$result_id = symfoware_prepare( $connection_id, "CREATE TABLE STOCKS.STOCK ( PRODUCT_NUMBER INTEGER
NOT NULL, PRODUCT_NAME CHAR(20) NOT NULL, STOCK_QUANTITY INTEGER, WAREHOUSE_NUMBER SMALLINT NOT
NULL ) ON DBSP1" ) or die( symfoware_errormsg( $connection_id ) ) ;
$rc = symfoware_execute( $result_id ) ;
if( ! $rc ) {
die( symfoware_errormsg( $connection_id ) ) ;
}
$result_id = symfoware_prepare( $connection_id, "INSERT INTO STOCKS.STOCK VALUES( ?, ?, ?, ? )" ) or
die( symfoware_errormsg( $connection_id ) ) ;
$params = array( 140, "cassette deck", 120, 2 ) ;
$rc = symfoware_execute( $result_id, $params ) ;
if( ! $rc ) {
die( symfoware_errormsg( $connection_id ) ) ;
}
$params = array( 110, "television", 85, 2 ) ;
$rc = symfoware_execute( $result_id, $params ) ;
if( ! $rc ) {
die( symfoware_errormsg( $connection_id ) ) ;
}
$result_id = symfoware_prepare( $connection_id, "SELECT * FROM STOCKS.STOCK" ) or
die( symfoware_errormsg( $connection_id ) ) ;
symfoware_execute( $result_id ) ;
while( symfoware_fetch_row( $result_id ) ) {
for( $x = 1 ; $x <= symfoware_num_fields( $result_id ) ; $x ++ ) {
if( $x != 1 ) printf( " " ) ;
- 28 -
printf( "%s", symfoware_result( $result_id, $x ) ) ;
}
printf( "¥n" ) ;
}
symfoware_close( $connection_id ) ;
?>
</PRE>
</BODY>
</HTML>
4.2.15 symfoware_fetch_array
説明
symfoware_fetch_arrayは、フェッチし、連想配列で結果の行を返却します。
構文
array symfoware_fetch_array( int result_id [, int row_number ] ) ;
パラメタ
result_id :
結果IDを指定してください。
row_number :
1以上の数値で行番号を指定してください。
次の行をフェッチする場合、省略してください。
戻り値
連想配列が返却されます。
結果の行が0の場合または異常の場合、FALSEが返却されます。
例
<HTML>
<BODY>
<PRE>
<?php
$connection_id = symfoware_connect( "RDBDB", "rdbmng", "******" ) or die( symfoware_errormsg() ) ;
@symfoware_exec( $connection_id, "DROP TABLE STOCKS.STOCK CASCADE" ) ;
symfoware_exec( $connection_id, "CREATE TABLE STOCKS.STOCK ( PRODUCT_NUMBER INTEGER NOT NULL,
PRODUCT_NAME CHAR(20) NOT NULL, STOCK_QUANTITY INTEGER, WAREHOUSE_NUMBER SMALLINT NOT NULL ) ON
DBSP1" ) or die( symfoware_errormsg( $connection_id ) ) ;
symfoware_exec( $connection_id, "INSERT INTO STOCKS.STOCK VALUES( 140, 'cassette deck', 120, 2 )" )
or die( symfoware_errormsg( $connection_id ) ) ;
symfoware_exec( $connection_id, "INSERT INTO STOCKS.STOCK VALUES( 110, 'television', 85, 2 )" ) or
die( symfoware_errormsg( $connection_id ) ) ;
$result_id = symfoware_prepare( $connection_id, "SELECT * FROM STOCKS.STOCK ORDER BY PRODUCT_NAME" )
or die( symfoware_errormsg( $connection_id ) ) ;
symfoware_execute( $result_id ) ;
for( ; ; ) {
$values = symfoware_fetch_array( $result_id ) ;
if( ! $values ) {
break ;
}
printf( "%d¥n", $values["PRODUCT_NUMBER"] ) ;
printf( "%s¥n", $values["PRODUCT_NAME"] ) ;
printf( "%d¥n", $values["STOCK_QUANTITY"] ) ;
- 29 -
printf( "%d¥n", $values["WAREHOUSE_NUMBER"] ) ;
}
$result_id = symfoware_prepare( $connection_id, "SELECT * FROM STOCKS.STOCK ORDER BY RODUCT_NAME" )
or die( symfoware_errormsg( $connection_id ) ) ;
symfoware_execute( $result_id ) ;
for( $y = 2 ; $y >= 1 ; $y -- ) {
$values = symfoware_fetch_array( $result_id, $y ) ;
printf( "%d¥n", $values["PRODUCT_NUMBER"] ) ;
printf( "%s¥n", $values["PRODUCT_NAME"] ) ;
printf( "%d¥n", $values["STOCK_QUANTITY"] ) ;
printf( "%d¥n", $values["WAREHOUSE_NUMBER"] ) ;
}
symfoware_close( $connection_id ) ;
?>
</PRE>
</BODY>
</HTML>
4.2.16 symfoware_fetch_into
説明
symfoware_fetch_intoは、フェッチし、配列で結果の行を返却し、復帰値を返却します。
構文
int symfoware_fetch_into( int result_id, array &value [, int row_number ] ) ;
パラメタ
result_id :
結果IDを指定してください。
value :
結果を受け取る配列を指定してください。
row_number :
1以上の数値で行番号を指定してください。
次の行をフェッチする場合、省略してください。
戻り値
0以上の列番号が返却されます。
結果の行が0の場合または異常の場合、FALSEが返却されます。
例
<HTML>
<BODY>
<PRE>
<?php
$connection_id = symfoware_connect( "RDBDB", "rdbmng", "******" ) or die( symfoware_errormsg() ) ;
@symfoware_exec( $connection_id, "DROP TABLE STOCKS.STOCK CASCADE" ) ;
symfoware_exec( $connection_id, "CREATE TABLE STOCKS.STOCK ( PRODUCT_NUMBER INTEGER NOT NULL,
PRODUCT_NAME CHAR(20) NOT NULL, STOCK_QUANTITY INTEGER, WAREHOUSE_NUMBER SMALLINT NOT NULL ) ON
DBSP1" ) or die( symfoware_errormsg( $connection_id ) ) ;
symfoware_exec( $connection_id, "INSERT INTO STOCKS.STOCK VALUES( 140, 'cassette deck', 120, 2 )" )
or die( symfoware_errormsg( $connection_id ) ) ;
symfoware_exec( $connection_id, "INSERT INTO STOCKS.STOCK VALUES( 110, 'television', 85, 2 )" ) or
die( symfoware_errormsg( $connection_id ) ) ;
- 30 -
$result_id = symfoware_prepare( $connection_id, "SELECT * FROM STOCKS.STOCK ORDER BY PRODUCT_NAME" )
or die( symfoware_errormsg( $connection_id ) ) ;
symfoware_execute( $result_id ) ;
for( ; ; ) {
$rc = symfoware_fetch_into( $result_id, $values ) ;
if( ! $rc ) {
break ;
}
for( $x = 1 ; $x <= $rc ; $x ++ ) {
if( $x != 1 ) printf( " " ) ;
printf( "%s", $values[ $x - 1 ] ) ;
}
printf( "¥n" ) ;
}
$result_id = symfoware_prepare( $connection_id, "SELECT * FROM STOCKS.STOCK ORDER BY PRODUCT_NAME" )
or die( symfoware_errormsg( $connection_id ) ) ;
symfoware_execute( $result_id ) ;
for( $y = 2 ; $y >= 1 ; $y -- ) {
$rc = symfoware_fetch_into( $result_id, $values, $y ) ;
for( $x = 1 ; $x <= $rc ; $x ++ ) {
if( $x != 1 ) printf( " " ) ;
printf( "%s", $values[ $x - 1 ] ) ;
}
printf( "¥n" ) ;
}
symfoware_close( $connection_id ) ;
?>
</PRE>
</BODY>
</HTML>
4.2.17 symfoware_fetch_object
説明
symfoware_fetch_objectは、フェッチし、オブジェクトで結果の行を返却します。
構文
object symfoware_fetch_object( int result_id [, int row_number ] ) ;
パラメタ
result_id :
結果IDを指定してください。
row_number :
1以上の数値で行番号を指定してください。
次の行をフェッチする場合、省略してください。
戻り値
オブジェクトが返却されます。
結果の行が0の場合または異常の場合、FALSEが返却されます。
例
<HTML>
<BODY>
<PRE>
- 31 -
<?php
$connection_id = symfoware_connect( "RDBDB", "rdbmng", "******" ) or die( symfoware_errormsg() ) ;
@symfoware_exec( $connection_id, "DROP TABLE STOCKS.STOCK CASCADE" ) ;
symfoware_exec( $connection_id, "CREATE TABLE STOCKS.STOCK ( PRODUCT_NUMBER INTEGER NOT NULL,
PRODUCT_NAME CHAR(20) NOT NULL, STOCK_QUANTITY INTEGER, WAREHOUSE_NUMBER SMALLINT NOT NULL ) ON
DBSP1" ) or die( symfoware_errormsg( $connection_id ) ) ;
symfoware_exec( $connection_id, "INSERT INTO STOCKS.STOCK VALUES( 140, 'cassette deck', 120, 2 )" )
or die( symfoware_errormsg( $connection_id ) ) ;
symfoware_exec( $connection_id, "INSERT INTO STOCKS.STOCK VALUES( 110, 'television', 85, 2 )" ) or
die( symfoware_errormsg( $connection_id ) ) ;
$result_id = symfoware_prepare( $connection_id, "SELECT * FROM STOCKS.STOCK ORDER BY PRODUCT_NAME" )
or die( symfoware_errormsg( $connection_id ) ) ;
symfoware_execute( $result_id ) ;
for( ; ; ) {
$obj = symfoware_fetch_object( $result_id ) ;
if( ! $obj ) {
break ;
}
printf( "%d¥n", $obj->PRODUCT_NUMBER ) ;
printf( "%s¥n", $obj->PRODUCT_NAME ) ;
printf( "%d¥n", $obj->STOCK_QUANTITY ) ;
printf( "%d¥n", $obj->WAREHOUSE_NUMBER ) ;
}
$result_id = symfoware_prepare( $connection_id, "SELECT * FROM STOCKS.STOCK ORDER BY PRODUCT_NAME" )
or die( symfoware_errormsg( $connection_id ) ) ;
symfoware_execute( $result_id ) ;
for( $y = 2 ; $y >= 1 ; $y -- ) {
$obj = symfoware_fetch_object( $result_id, $y ) ;
printf( "%d¥n", $obj->PRODUCT_NUMBER ) ;
printf( "%s¥n", $obj->PRODUCT_NAME ) ;
printf( "%d¥n", $obj->STOCK_QUANTITY ) ;
printf( "%d¥n", $obj->WAREHOUSE_NUMBER ) ;
}
symfoware_close( $connection_id ) ;
?>
</PRE>
</BODY>
</HTML>
4.2.18 symfoware_fetch_row
説明
symfoware_fetch_rowは、フェッチして、復帰値を返却します。
symfoware_fetch_rowの呼び出し後、symfoware_resultで行のデータの取り出しが可能となります。
構文
int symfoware_fetch_row( int result_id [, int row_number ] ) ;
パラメタ
result_id :
結果IDを指定してください。
row_number :
1以上の数値で行番号を指定してください。
次の行をフェッチする場合、省略してください。
- 32 -
戻り値
TRUEが返却されます。
結果の行が0の場合、または異常の場合、FALSEが返却されます。
例
<HTML>
<BODY>
<PRE>
<?php
$connection_id = symfoware_connect( "RDBDB", "rdbmng", "******" ) or die( symfoware_errormsg() ) ;
@symfoware_exec( $connection_id, "DROP TABLE STOCKS.STOCK CASCADE" ) ;
symfoware_exec( $connection_id, "CREATE TABLE STOCKS.STOCK ( PRODUCT_NUMBER INTEGER NOT NULL,
PRODUCT_NAME CHAR(20) NOT NULL, STOCK_QUANTITY INTEGER, WAREHOUSE_NUMBER SMALLINT NOT NULL ) ON
DBSP1" ) or die( symfoware_errormsg( $connection_id ) ) ;
symfoware_exec( $connection_id, "INSERT INTO STOCKS.STOCK VALUES( 140, 'cassette deck', 120, 2 )" )
or die( symfoware_errormsg( $connection_id ) ) ;
symfoware_exec( $connection_id, "INSERT INTO STOCKS.STOCK VALUES( 110, 'television', 85, 2 )" ) or
die( symfoware_errormsg( $connection_id ) ) ;
symfoware_exec( $connection_id, "INSERT INTO STOCKS.STOCK VALUES( 999, 'unknown', NULL, 999 )" ) or
die( symfoware_errormsg( $connection_id ) ) ;
$result_id = symfoware_prepare( $connection_id, "SELECT * FROM STOCKS.STOCK ORDER BY PRODUCT_NAME" )
or die( symfoware_errormsg( $connection_id ) ) ;
symfoware_execute( $result_id ) ;
for( ; ; ) {
$rc = symfoware_fetch_row( $result_id ) ;
if( ! $rc ) {
break ;
}
for( $x = 1 ; $x <= symfoware_num_fields( $result_id ) ; $x ++ ) {
if( $x != 1 ) printf( " " ) ;
if( symfoware_isnull( $result_id, $x ) ) {
printf( "NULL" ) ;
}
else {
printf( "%s", symfoware_result( $result_id, $x ) ) ;
}
}
printf( "¥n" ) ;
}
$result_id = symfoware_prepare( $connection_id, "SELECT * FROM STOCKS.STOCK ORDER BY PRODUCT_NAME" )
or die( symfoware_errormsg( $connection_id ) ) ;
symfoware_execute( $result_id ) ;
for( $y = 3 ; $y >= 1 ; $y -- ) {
$rc = symfoware_fetch_row( $result_id, $y ) ;
for( $x = 1 ; $x <= symfoware_num_fields( $result_id ) ; $x ++ ) {
if( $x != 1 ) printf( " " ) ;
if( symfoware_isnull( $result_id, $x ) ) {
printf( "NULL" ) ;
}
else {
printf( "%s", symfoware_result( $result_id, $x ) ) ;
}
}
printf( "¥n" ) ;
}
symfoware_close( $connection_id ) ;
?>
</PRE>
</BODY>
</HTML>
- 33 -
4.2.19 symfoware_field_len
説明
symfoware_field_lenは、選択リストの列の長さを返却します。
構文
int symfoware_field_len( int result_id, int field_number ) ;
パラメタ
result_id :
結果IDを指定してください。
field_number :
1以上の数値で列番号を指定してください。
戻り値
列の長さが返却されます。
異常の場合、FALSEが返却されます。
例
<HTML>
<BODY>
<PRE>
<?php
$connection_id = symfoware_connect( "RDBDB", "rdbmng", "******" ) or die( symfoware_errormsg() ) ;
@symfoware_exec( $connection_id, "DROP TABLE STOCKS.STOCK CASCADE" ) ;
symfoware_exec( $connection_id, "CREATE TABLE STOCKS.STOCK ( PRODUCT_NUMBER INTEGER NOT NULL,
PRODUCT_NAME CHAR(20) NOT NULL, STOCK_QUANTITY INTEGER, WAREHOUSE_NUMBER SMALLINT NOT NULL ) ON
DBSP1" ) or die( symfoware_errormsg( $connection_id ) ) ;
symfoware_exec( $connection_id, "INSERT INTO STOCKS.STOCK VALUES( 140, 'cassette deck', 120, 2 )" )
or die( symfoware_errormsg( $connection_id ) ) ;
symfoware_exec( $connection_id, "INSERT INTO STOCKS.STOCK VALUES( 110, 'television', 85, 2 )" ) or
die( symfoware_errormsg( $connection_id ) ) ;
$result_id = symfoware_prepare( $connection_id, "SELECT * FROM STOCKS.STOCK" ) or
die( symfoware_errormsg( $connection_id ) ) ;
symfoware_execute( $result_id ) ;
printf( "num_fields : %s¥n", symfoware_num_fields( $result_id ) ) ;
for( $x = 1 ; $x <= symfoware_num_fields( $result_id ) ; $x ++ ) {
printf( "field_name : %s¥n", symfoware_field_name( $result_id, $x ) ) ;
printf( "field_type : %s¥n", symfoware_field_type( $result_id, $x ) ) ;
printf( "field_len : %d¥n", symfoware_field_len( $result_id, $x ) ) ;
printf( "field_precision : %d¥n", symfoware_field_precision( $result_id, $x ) ) ;
printf( "field_scale : %d¥n", symfoware_field_scale( $result_id, $x ) ) ;
}
symfoware_close( $connection_id ) ;
?>
</PRE>
</BODY>
</HTML>
4.2.20 symfoware_field_name
説明
symfoware_field_nameは、選択リストの列名を返却します。
- 34 -
構文
string symfoware_field_name( int result_id, int field_number ) ;
パラメタ
result_id :
結果IDを指定してください。
field_number :
1以上の数値で列番号を指定してください。
戻り値
列名が返却されます。
異常の場合、FALSEが返却されます。
例
“4.2.19 symfoware_field_len”の“例”を参照してください。
4.2.21 symfoware_field_num
説明
symfoware_field_numは、選択リストの列名の番号を返却します。
構文
string symfoware_field_num( int result_id, string field_name ) ;
パラメタ
result_id :
結果IDを指定してください。
field_name :
列名を指定してください。
戻り値
1以上の数値で列番号が返却されます。
異常の場合、FALSEが返却されます。
例
“4.2.19 symfoware_field_len”の“例”を参照してください。
4.2.22 symfoware_field_precision
説明
symfoware_field_precisionは、選択リストの列の精度を返却します。
構文
int symfoware_field_precision( int result_id, int field_number ) ;
- 35 -
パラメタ
result_id :
結果IDを指定してください。
field_number :
1以上の数値で列番号を指定してください。
戻り値
列の精度が返却されます。
異常の場合、FALSEが返却されます。
例
“4.2.19 symfoware_field_len”の“例”を参照してください。
4.2.23 symfoware_field_scale
説明
symfoware_field_scaleは、選択リストの列の位取りを返却します。
構文
int symfoware_field_scale( int result_id, int field_number ) ;
パラメタ
result_id :
結果IDを指定してください。
field_number :
1以上の数値で列番号を指定してください。
戻り値
列の位取りが返却されます。
異常の場合、FALSEが返却されます。
例
“4.2.19 symfoware_field_len”の“例”を参照してください。
4.2.24 symfoware_field_type
説明
symfoware_field_typeは、選択リストの列のSQLデータ型番号を返却します。
構文
string symfoware_field_type( int result_id, int field_number ) ;
パラメタ
result_id :
結果IDを指定してください。
field_number :
- 36 -
1以上の数値で列番号を指定してください。
戻り値
列のSQLデータを表わす文字列が返却されます。
例
“4.2.19 symfoware_field_len”の“例”を参照してください。
4.2.25 symfoware_foreignkeys
説明
symfoware_foreignkeysは未サポートです。
symfoware_foreignkeysを使用したときの動作は不定です。
4.2.26 symfoware_free_result
説明
symfoware_free_resultは、準備したSQL文を明示的に開放します。
自動的にコミットしない場合において、symfoware_free_resultを呼び出すと、データベースをロールバックします。
構文
int symfoware_free_result( int result_id ) ;
パラメタ
result_id :
結果IDを指定してください。
戻り値
常にTRUEを返却します。
例
<HTML>
<BODY>
<PRE>
<?php
$connection_id = symfoware_connect( "RDBDB", "rdbmng", "******" ) or die( symfoware_errormsg() ) ;
@symfoware_exec( $connection_id, "DROP TABLE STOCKS.STOCK CASCADE" ) ;
symfoware_exec( $connection_id, "CREATE TABLE STOCKS.STOCK ( PRODUCT_NUMBER INTEGER NOT NULL,
PRODUCT_NAME CHAR(20) NOT NULL, STOCK_QUANTITY INTEGER, WAREHOUSE_NUMBER SMALLINT NOT NULL ) ON
DBSP1" ) or die( symfoware_errormsg( $connection_id ) ) ;
$result_id = symfoware_prepare( $connection_id, "INSERT INTO STOCKS.STOCK VALUES( ?, ?, ?, ? )" ) or
die( symfoware_errormsg( $connection_id ) ) ;
$params = array( 140, "cassette deck", 120, 2 ) ;
$rc = symfoware_execute( $result_id, $params ) ;
if( ! $rc ) {
die( symfoware_errormsg( $connection_id ) ) ;
}
$params = array( 110, "television", 85, 2 ) ;
$rc = symfoware_execute( $result_id, $params ) ;
if( ! $rc ) {
die( symfoware_errormsg( $connection_id ) ) ;
}
symfoware_free_result( $result_id ) ;
- 37 -
$params = array( 999, "unknown", 999, 999 ) ;
$rc = @symfoware_execute( $result_id, $params ) ; // warning
if( ! $rc ) {
printf( "no insert¥n" );
}
$result_id = symfoware_prepare( $connection_id, "SELECT * FROM STOCKS.STOCK" ) or
die( symfoware_errormsg( $connection_id ) ) ;
symfoware_execute( $result_id ) ;
while( symfoware_fetch_row( $result_id ) ) {
for( $x = 1 ; $x <= symfoware_num_fields( $result_id ) ; $x ++ ) {
if( $x != 1 ) printf( " " ) ;
printf( "%s", symfoware_result( $result_id, $x ) ) ;
}
printf( "¥n" ) ;
}
$result_id = symfoware_prepare( $connection_id, "SELECT * FROM STOCKS.STOCK" ) or
die( symfoware_errormsg( $connection_id ) ) ;
symfoware_execute( $result_id ) ;
symfoware_fetch_row( $result_id ) ;
for( $x = 1 ; $x <= symfoware_num_fields( $result_id ) ; $x ++ ) {
if( $x != 1 ) printf( " " ) ;
printf( "%s", symfoware_result( $result_id, $x ) ) ;
}
printf( "¥n" ) ;
symfoware_free_result( $result_id ) ;
$rc = @symfoware_fetch_row( $result_id ) ; // warning
if( ! $rc ) {
printf( "no record¥n" ) ;
}
symfoware_close( $connection_id ) ;
?>
</PRE>
</BODY>
</HTML>
4.2.27 symfoware_gettypeinfo
説明
symfoware_gettypeinfoは、サポートしているデータ型の情報を取得するための結果IDを返却します。
構文
int symfoware_gettypeinfo( int connection_id [, int data_type ] ) ;
パラメタ
connection_id :
接続IDを指定してください。
data_type :
SQLデータ型番号を指定してください。SQLデータ型番号と意味を以下に示します。
SQLデータ型番号 意味
1 CHAR
2 NUMERIC
3 DECIMAL
4 INTEGER
5 SMALLINT
- 38 -
SQLデータ型番号 意味
7 REAL、FLOATの精度1から23まで
8 DOUBLE、FLOATの精度24から52まで
12 CHAR VARYING
91 DATE
92 TIME
93 TIMESTAMP
101 INTERVAL YEAR
102 INTERVAL MONTH
103 INTERVAL DAY
104 INTERVAL HOUR
105 INTERVAL MINUTE
106 INTERVAL SECOND
107 INTERVAL YEAR TO MONTH
108 INTERVAL DAY TO HOUR
109 INTERVAL DAY TO MINUTE
110 INTERVAL DAY TO SECOND
111 INTERVAL HOUR TO MINUTE
112 INTERVAL HOUR TO SECOND
113 INTERVAL MINUTE TO SECOND
-3 32KバイトまでのBLOB
-4 32Kバイトを超えて2GバイトまでのBLOB
-91 NCHAR
-93 NCHAR VARYING
すべてのデータ型の情報を得る場合、省略してください。
戻り値
結果IDが返却されます。結果IDをフェッチすることにより、データ型の情報を得ることができます。情報の列番号と値を以下に示しま
す。
列番号 値
1 データ型を表す文字列が設定されます。
2 SQLデータ型番号が設定されます。
3 真数の場合、10進数での桁数が設定されます。
概数の場合、ビット数が設定されます
文字列型、各国語文字列型の場合、 大文字数が
設定されます。
日時型の場合、 大文字数が設定されます。
時間隔型の場合、 大文字数が設定されます。
BLOB型の場合、 大バイト数が設定されます。
4 定数値の先頭に付ける文字列が設定されます。
- 39 -
列番号 値
定数値の先頭に付ける文字列がない場合、空文字
列が設定されます。
5 定数値の後方に付ける文字列が設定されます。
定数値の後方に付ける文字列がない場合、空文字
列が設定されます。
6 データ型に精度、位取りが指定できる場
合、"PRECISION,SCALE"が設定されます。
データ型に長さが指定できる場合、"LENGTH"が設
定されます。
データ型に精度、位取り、長さが指定できない場合、
空文字列が設定されます。
7 常にNULLの値を持つ可能性があるため、1が設定
されます。
8 文字列型の場合、比較において大文字と小文字を
区別するため、TRUEが設定されます。
文字列型以外の場合、FALSEが設定されます。
9 文字列型の場合、比較において大文字と小文字を
区別するため、TRUEが設定されます。
文字列型以外の場合、FALSEが設定されます。
10 探索条件に指定できない場合、0が設定されます。
LIKE述語を除く探索条件に指定できる場合、2が設
定されます。
探索条件に指定できる場合、3が設定されます。
11 真数、概数の場合、常に符号ありのため、TRUEが設定されます。
真数、概数でない場合、NULLが設定されます。
12 真数、概数の場合、新しい行を挿入するとき自動的
にユニークな値とはならないため、FALSEが設定さ
れます。
真数、概数以外の場合、NULLが設定されます。
13 Symfoware/RDBで規定されたデータ型を表す文字
列が設定されます。
14 位取りの 小値が設定されます。
15 位取りの 大値が設定されます。
16 日時型の場合、9が設定されます。
時間隔型の場合、10が設定されます。
日時型、時間隔型以外の場合、SQLデータ型番号
が設定されます。
17 DATE型の場合、1が設定されます。
TIME型の場合、2が設定されます。
TIMESTAMP型の場合、3が設定されます。
日時型、時間隔型以外の場合、NULLが設定されま
す。
18 真数の場合、10が設定されます。
- 40 -
列番号 値
概数の場合、2が設定されます。
真数、概数以外の場合、NULLが設定されます。
19 時間隔型の場合、時間隔先行フィールド精度の
大文字数が設定されます。
時間隔型以外の場合、NULLが設定されます。
異常の場合、FALSEが返却されます。
例
<HTML>
<BODY>
<PRE>
<?php
$connection_id = symfoware_connect( "RDBDB", "rdbmng", "******" ) or die( symfoware_errormsg() ) ;
$result_id = symfoware_gettypeinfo( $connection_id ) ;
if( ! $result_id ) {
symfoware_errormsg( $connection_id ) ;
}
$c = 0 ;
while( symfoware_fetch_row( $result_id ) ) {
$c ++ ;
printf( "(%d)¥n", $c ) ;
printf( "TYPE_NAME : %s¥n", symfoware_result( $result_id, 1 ) ) ;
printf( "DATA_TYPE : %d¥n", symfoware_result( $result_id, 2 ) ) ;
printf( "COLUMN_SIZE : %d¥n", symfoware_result( $result_id, 3 ) ) ;
printf( "LITERAL_PREFIX : %s¥n", symfoware_result( $result_id, 4 ) ) ;
printf( "LITERAL_SUFFIX : %s¥n", symfoware_result( $result_id, 5 ) ) ;
printf( "CREATE_PARAMS : %s¥n", symfoware_result( $result_id, 6 ) ) ;
printf( "NULLABLE : %d¥n", symfoware_result( $result_id, 7 ) ) ;
printf( "CASE_SENSITIVE : %s¥n", symfoware_result( $result_id, 8 ) ? "TRUE" : "FALSE" ) ;
printf( "SEARCHABLE : %s¥n", symfoware_result( $result_id, 9 ) ) ;
printf( "UNSIGNED_ATTRIBUTE : %s¥n", symfoware_isnull( $result_id, 10 ) ? "NULL" :
symfoware_result( $result_id, 10 ) ? "TRUE" : "FALSE" ) ;
printf( "FIXED_PREC_SCALE : %s¥n", symfoware_isnull( $result_id, 11 ) ? "NULL" :
symfoware_result( $result_id, 11 ) ? "TRUE" : "FALSE" ) ;
printf( "AUTO_UNIQUE_VALUE : %s¥n", symfoware_isnull( $result_id, 12 ) ? "NULL" :
symfoware_result( $result_id, 12 ) ? "TRUE" : "FALSE" ) ;
printf( "LOCAL_TYPE_NAME : %s¥n", symfoware_result( $result_id, 13 ) ) ;
printf( "MINIMUM_SCALE : %d¥n", symfoware_result( $result_id, 14 ) ) ;
printf( "MAXIMUM_SCALE : %d¥n", symfoware_result( $result_id, 15 ) ) ;
printf( "SQL_DATA_TYPE : %d¥n", symfoware_result( $result_id, 16 ) ) ;
printf( "SQL_DATETIME_SUB : " . ( symfoware_isnull( $result_id, 17 ) ? "%s¥n" : "%d¥n" ),
symfoware_isnull( $result_id, 17 ) ? "NULL" : symfoware_result( $result_id, 17 ) ) ;
printf( "NUM_PREC_RADIX : " . ( symfoware_isnull( $result_id, 18 ) ? "%s¥n" : "%d¥n" ),
symfoware_isnull( $result_id, 18 ) ? "NULL" : symfoware_result( $result_id, 18 ) ) ;
printf( "INTERVAL_PRECISION : " . ( symfoware_isnull( $result_id, 19 ) ? "%s¥n" : "%d¥n" ),
symfoware_isnull( $result_id, 19 ) ? "NULL" : symfoware_result( $result_id, 19 ) ) ;
}
symfoware_close( $connection_id ) ;
?>
</PRE>
</BODY>
</HTML>
4.2.28 symfoware_isnull
- 41 -
説明
symfoware_isnullは、フェッチで位置づけられた行の値がナルか否かを判定し、復帰値を返却します。
構文
bool symfoware_isnull( int result_id, mixed field_name_or_number );
パラメタ
result_id :
結果IDを指定してください。
field_name_or_number:
列名を指定してください。または、1以上の数値で列番号を指定してください。
戻り値
値がナル値の場合、TRUEを返却します。
値がナル値でない場合、FALSEを返却します。
例
“4.2.18 symfoware_fetch_row“の“例”を参照してください。
4.2.29 symfoware_longreadlen
説明
symfoware_longreadlenは、フェッチするデータの長さ(バイト数)を設定します。
フェッチするデータの長さの省略値は4096です。
フェッチするデータの長さより列のデータが長いときは、列のデータをデータの長さで切り捨てます。
フェッチする長さを0にした場合、32Kバイトを超えて2GバイトまでのBLOB型からの読み込みで、バイナリデータをそのまま出力に渡し
ます。
構文
int symfoware_longreadlen( int result_id, int max_len ) ;
パラメタ
result_id :
結果IDを指定してください。
新規の結果のデフォルト値とする場合、0を指定してください。
max_len :
フェッチするデータ長を指定してください。
フェッチするデータ長を無限とする場合、0を指定してください。
戻り値
TRUEを返却します。
異常の場合、FALSEを返却します。
例
<HTML>
<BODY>
- 42 -
<PRE>
<?php
$connection_id = symfoware_connect( "RDBDB", "rdbmng", "******" ) or die( symfoware_errormsg() ) ;
@symfoware_exec( $connection_id, "DROP TABLE STOCKS.SLIP CASCADE" ) ;
symfoware_exec( $connection_id, "CREATE TABLE STOCKS.SLIP ( ORDER_NUMBER INTEGER, ORDER_SLIP
BLOB(1K) ) ON DBSP1" ) or die( symfoware_errormsg( $connection_id ) ) ;
$result_id = symfoware_prepare( $connection_id, "INSERT INTO STOCKS.SLIP VALUES( ?, ? )" ) ;
$params = array( 140, "<?xml version='1.0' ?><SLIP><NUMBER>140</NUMBER><NAME>cassette deck</NAME></
SLIP>" ) ;
symfoware_execute( $result_id, $params ) or die( symfoware_errormsg() ) ;
$params = array( 110, "<?xml version='1.0' ?><SLIP><NUMBER>110</NUMBER><NAME>television</NAME></
SLIP>" ) ;
symfoware_execute( $result_id, $params ) or die( symfoware_errormsg() ) ;
$result_id = symfoware_prepare( $connection_id, "SELECT * FROM STOCKS.SLIP" ) or
die( symfoware_errormsg( $connection_id ) ) ;
symfoware_execute( $result_id ) ;
while( symfoware_fetch_row( $result_id ) ) {
for( $x = 1 ; $x <= symfoware_num_fields( $result_id ) ; $x ++ ) {
if( $x != 1 ) printf( " " ) ;
printf( "%s", symfoware_result( $result_id, $x ) ) ;
}
printf( "¥n" ) ;
}
$result_id = symfoware_prepare( $connection_id, "SELECT * FROM STOCKS.SLIP" ) or
die( symfoware_errormsg( $connection_id ) ) ;
symfoware_longreadlen( $result_id, 10 ) ;
symfoware_execute( $result_id ) ;
while( symfoware_fetch_row( $result_id ) ) {
for( $x = 1 ; $x <= symfoware_num_fields( $result_id ) ; $x ++ ) {
if( $x != 1 ) printf( " " ) ;
printf( "%s", symfoware_result( $result_id, $x ) ) ;
}
printf( "¥n" ) ;
}
symfoware_close( $connection_id ) ;
?>
</PRE>
</BODY>
</HTML>
4.2.30 symfoware_next_result
説明
symfoware_next_resultは、未サポートです。
symfoware_next_resultを使用したときの動作は不定です。
4.2.31 symfoware_num_fields
説明
symfoware_num_fieldsは、結果の列数を返却します。
構文
int symfoware_num_fields( int result_id ) ;
パラメタ
result_id :
結果IDを指定してください。
- 43 -
戻り値
列数が返却されます。
異常の場合、-1が返却されます。
例
“4.2.19 symfoware_field_len”の“例”を参照してください。
4.2.32 symfoware_num_rows
説明
symfoware_num_rowsは、データベースアクセスで影響を受けた行数を返却します。
構文
int symfoware_num_rows( int result_id ) ;
パラメタ
result_id :
結果IDを指定してください。
戻り値
SQL文が動的SELECT文の場合、-1が返却されます。
SQL文がINSERT文、UPDATE文:探索、UPDATE文:位置付けまたはDELETE文:探索、DELETE文:位置付けの場合、更新件数が
返却されます。
SQL文が動的SELECT文、INSERT文、UPDATE文:探索およびDELETE文:探索以外の場合、0が返却されます。
異常の場合、-1が返却されます。
例
<HTML>
<BODY>
<PRE>
<?php
$connection_id = symfoware_connect( "RDBDB", "rdbmng", "******" ) ;
if( ! $connection_id ) {
die( symfoware_errormsg() ) ;
}
@symfoware_exec( $connection_id, "DROP TABLE STOCKS.STOCK CASCADE" ) ;
$result_id = symfoware_exec( $connection_id, "CREATE TABLE STOCKS.STOCK ( PRODUCT_NUMBER INTEGER NOT
NULL, PRODUCT_NAME CHAR(20) NOT NULL, STOCK_QUANTITY INTEGER, WAREHOUSE_NUMBER SMALLINT NOT NULL ) ON
DBSP1" ) ;
printf( "num_rows : %d¥n", symfoware_num_rows( $result_id ) ) ;
$result_id = symfoware_exec( $connection_id, "INSERT INTO STOCKS.STOCK VALUES( 140, 'cassette deck',
120, 2 )" ) ;
printf( "num_rows : %d¥n", symfoware_num_rows( $result_id ) ) ;
$result_id = symfoware_exec( $connection_id, "INSERT INTO STOCKS.STOCK VALUES( 110, 'television', 85,
2 )" ) ;
printf( "num_rows : %d¥n", symfoware_num_rows( $result_id ) ) ;
$result_id = symfoware_prepare( $connection_id, "SELECT * FROM STOCKS.STOCK" ) or
die( symfoware_errormsg( $connection_id ) ) ;
symfoware_execute( $result_id ) ;
printf( "num_rows : %d¥n", symfoware_num_rows( $result_id ) ) ;
while( symfoware_fetch_row( $result_id ) ) {
for( $x = 1 ; $x <= symfoware_num_fields( $result_id ) ; $x ++ ) {
- 44 -
if( $x != 1 ) printf( " " ) ;
printf( "%s", symfoware_result( $result_id, $x ) ) ;
}
printf( "¥n" ) ;
}
symfoware_close( $connection_id ) ;
?>
</PRE>
</BODY>
</HTML>
4.2.33 symfoware_pconnect
説明
symfoware_pconnectは、データベースに接続し、接続IDを返却します。
symfoware_close、symfoware_close_allでデータベースの切断を行わなかった場合、PHPスクリプトが終了してもsymfoware_pconnectのデータベースの接続は切断されません。同じパラメタでsymfoware_pconnectを呼び出した場合、データベース接続を再利用します。
これを持続的な接続と呼びます。
持続的な接続は、Apacheのサーバプロセスごとに行われます。Apacheのサーバプロセス数は、Apache動作環境ファイルの
StartServers、MinSpareServersおよびMaxSpareServersディレクティブで指定します。
コマンドライン版PHPインタプリタでは、持続的な接続は使用できません。
構文
int symfoware_pconnect( string data_source, string user_name, string password ) ;
パラメタ
data_source :
データソース名を指定してください。
Symfoware/RDBにローカルアクセスする場合、"データベース名"または"データベース名;パラメタ"を指定してください。
Symfoware/RDBにリモートアクセスする場合、"データベース名,ホスト名,ポート番号"または"データベース名,ホスト名,ポート番号;パラ
メタ"を指定してください。
パラメタについては、“付録A connect、pconnectのパラメタの記述形式”を参照してください。
user_name :
認可識別子を指定してください。
password :
パスワードを指定してください。
戻り値
接続IDが返却されます。
異常の場合、FALSEが返却されます。
例
持続的な接続を開始する
<?php
header( "Cache-Control: no-cache" ) ;
header( "Expires: Wed, 01 Jan 2002 00:00:00 GMT" ) ;
header( "Pragma: no-cache" ) ;
?>
<HTML>
- 45 -
<BODY>
<PRE>
<?php
$connection_id = symfoware_pconnect( "RDBDB", "rdbmng", "******" ) or
die( symfoware_errormsg() ) ;
printf( "not closed¥n" ) ;
?>
</PRE>
</BODY>
</HTML>
持続的な接続を終了する
<?php
header( "Cache-Control: no-cache" ) ;
header( "Expires: Wed, 01 Jan 2002 00:00:00 GMT" ) ;
header( "Pragma: no-cache" ) ;
?>
<HTML>
<BODY>
<PRE>
<?php
$connection_id = symfoware_pconnect( "RDBDB", "rdbmng", "******" ) or
die( symfoware_errormsg() ) ;
symfoware_close( $connection_id ) ;
printf( "closed¥n" ) ;
?>
</PRE>
</BODY>
</HTML>
4.2.34 symfoware_prepare
説明
symfoware_prepareは、SQL文を準備し、結果IDを返却します。
構文
int symfoware_prepare( int connection_id, int statement ) ;
パラメタ
connection_id :
接続IDを指定してください。
statement :
SQL文を指定してください。
戻り値
結果IDが返却されます。
異常の場合、FALSEが返却されます。
例
“4.2.14 symfoware_execute”の“例”を参照してください。
4.2.35 symfoware_primarykeys
- 46 -
説明
symfoware_primarykeysは、データベース中に存在するユーザが作成した表、一時表の一意性制約定義に関する情報を取得するた
めの結果IDを返却します。
構文
int symfoware_primarykeys( int connection_id [, string database_name [, string schema_name [, string table_name ]]] ) ;
パラメタ
connection_id :
接続IDを指定してください。
database_name :
データベース名を指定してください。
schema_name :
スキーマ名を指定してください。
table_name :
表名または一時表名を指定してください。
戻り値
結果IDが返却されます。結果IDをフェッチすることにより、一意性制約定義に関する情報を得ることができます。情報の列番号と値を
以下に示します。
列番号 値
1 データベース名が設定されます。
2 スキーマ名が設定されます。
3 表名、一時表名が設定されます。
4 列名が設定されます。
5 列番号が設定されます。
6 空文字列が設定されます。
異常の場合、FALSEが返却されます。
例
<HTML>
<BODY>
<PRE>
<?php
$connection_id = symfoware_connect( "RDBDB", "rdbmng", "******" ) or die( symfoware_errormsg() ) ;
@symfoware_exec( $connection_id, "DROP TABLE STOCKS.STOCK CASCADE" ) ;
symfoware_exec( $connection_id, "CREATE TABLE STOCKS.STOCK ( PRODUCT_NUMBER INTEGER NOT NULL,
PRODUCT_NAME CHAR(20) NOT NULL, STOCK_QUANTITY INTEGER, WAREHOUSE_NUMBER SMALLINT NOT NULL, PRIMARY
KEY(PRODUCT_NUMBER) ) ON DBSP1" ) or die( symfoware_errormsg( $connection_id ) ) ;
symfoware_exec( $connection_id, "CREATE INDEX STOCKS.STOCK.NUM_IX KEY(PRODUCT_NUMBER) ON DBSP1" ) or
die( symfoware_errormsg( $connection_id ) ) ;
$result_id = symfoware_primarykeys( $connection_id, "RDBDB", "STOCKS", "STOCK" ) ;
if( ! $result_id ) {
die( symfoware_errormsg( $connection_id ) ) ;
}
$c = 0 ;
while( symfoware_fetch_row( $result_id ) ) {
$c ++ ;
printf( "(%d)¥n", $c ) ;
- 47 -
printf( "TABLE_CAT : %s¥n", symfoware_result( $result_id, 1 ) ) ;
printf( "TABLE_SCHEM : %s¥n", symfoware_result( $result_id, 2 ) ) ;
printf( "TABLE_NAME : %s¥n", symfoware_result( $result_id, 3 ) ) ;
printf( "COLUMN_NAME : %s¥n", symfoware_result( $result_id, 4 ) ) ;
printf( "KEY_SEQ : %d¥n", symfoware_result( $result_id, 5 ) ) ;
printf( "PK_NAME : %s¥n", symfoware_result( $result_id, 6 ) ) ;
}
symfoware_close( $connection_id ) ;
?>
</PRE>
</BODY>
</HTML>
4.2.36 symfoware_procedurecolumns
説明
symfoware_procedurecolumnsは、データベース中に存在するユーザが作成したプロシジャルーチンおよびファンクションルーチンの
パラメタに関する情報を取得するための結果IDを返却します。
構文
int symfoware_procedurecolumns( int connection_id [, string database_name [, string schema_name [, string routine_name [, stringparam_name ]]]] ) ;
パラメタ
connection_id :
接続IDを指定してください。
database_name :
データベース名を指定してください。
schema_name :
スキーマ名を指定してください。
スキーマ名に検索パターン文字を指定することができます。0個以上の文字に合致させる場合は"%"を指定してください。
routine_name :
プロシジャルーチン名またはファンクションルーチン名を指定してください。
ルーチン名に検索パターン文字を指定することができます。0個以上の文字に合致させる場合は"%"を指定してください。
param_name :
パラメタ名を指定してください。
パラメタ名に検索パターン文字を指定することができます。0個以上の文字に合致させる場合は"%"を指定してください。
戻り値
結果IDが返却されます。結果IDをフェッチすることにより、パラメタに関する情報を得ることができます。情報の列番号と値を以下に示
します。
列番号 値
1 データベース名が設定されます。
2 スキーマ名が設定されます。
3 ルーチン名が設定されます。
4 プロシジャルーチンの場合、パラメタ名が設定されま
す。
- 48 -
列番号 値
ファンクションルーチンの場合、空文字列が設定さ
れます。
5 パラメタモードがINの場合、1が設定されます。
パラメタモードがOUTの場合、4が設定されます。
パラメタモードがINOUTの場合、2が設定されます。
6 SQLデータ型番号が設定されます。
7 データ型を表す文字列が設定されます。
8 真数の場合、10進数での桁数が設定されます。
概数の場合、ビット数が設定されます。
文字列型、各国語文字列型の場合、 大文字数が
設定されます。
日時型の場合、 大文字数が設定されます。
時間隔型の場合、 大文字数が設定されます。
BLOB型の場合、 大バイト数が設定されます。
9 データ長が設定されます。
10 位取りが設定されます。
11 真数の場合、10が設定されます。
概数の場合、2が設定されます。
真数、概数以外の場合、NULLが設定されます。
12 NULLを持つ可能性がある場合、TRUEが設定され
ます。
NULLを持つ可能性がない場合、FALSEが設定さ
れます。
13 空文字列が指定されます。
14 空文字列が指定されます。
15 日時型の場合、9が設定されます。
時間隔型の場合、10が設定されます。
日時型、時間隔型以外の場合、SQLデータ型番号
が設定されます。
16 DATE型の場合、1が設定されます。
TIME型の場合、2が設定されます。
TIMESTAMP型の場合、3が設定されます。
日時型、時間隔型以外の場合、NULLが設定されま
す。
17 文字型の場合、文字数が設定されます。
文字列型以外の場合、NULLが設定されます。
18 パラメタ番号が設定されます。
19 NULLを持つ可能性がある場合、"YES"が設定され
ます。
NULLを持つ可能性がない場合、"NO"が設定され
ます。
- 49 -
異常の場合、FALSEが返却されます。
例
<HTML>
<BODY>
<PRE>
<?php
$connection_id = symfoware_connect( "RDBDB", "rdbmng", "******" ) or die( symfoware_errormsg() ) ;
@symfoware_exec( $connection_id, "DROP TABLE STOCKS.STOCK CASCADE" ) ;
@symfoware_exec( $connection_id, "DROP PROCEDURE STOCKS.STOCK_P CASCADE" ) ;
@symfoware_exec( $connection_id, "DROP FUNCTION STOCKS.STOCK_F CASCADE" ) ;
symfoware_exec( $connection_id, "CREATE TABLE STOCKS.STOCK ( PRODUCT_NUMBER INTEGER NOT NULL,
PRODUCT_NAME CHAR(20) NOT NULL, STOCK_QUANTITY INTEGER, WAREHOUSE_NUMBER SMALLINT NOT NULL ) ON
DBSP1" ) or die( symfoware_errormsg( $connection_id ) ) ;
symfoware_exec( $connection_id, "CREATE PROCEDURE STOCKS.STOCK_P ( IN PRODUCT_NUMBER INTEGER, IN
PRODUCT_NAME CHAR(20), INOUT STOCK_QUANTITY INTEGER, INOUT WAREHOUSE_NUMBER SMALLINT ) COMMENT
'PROCEDURE' BEGIN INSERT INTO STOCKS.STOCK VALUES( PRODUCT_NUMBER, PRODUCT_NAME, STOCK_QUANTITY,
WAREHOUSE_NUMBER ) ; COMMIT WORK ; SET STOCK_QUANTITY = STOCK_QUANTITY + 1 ; SET WAREHOUSE_NUMBER =
WAREHOUSE_NUMBER + 1 ; END" ) or die( symfoware_errormsg( $connection_id ) ) ;
symfoware_exec( $connection_id, "CREATE FUNCTION STOCKS.STOCK_F ( IN INTEGER, IN CHAR(20), IN
INTEGER, IN SMALLINT ) RETURNS INTEGER COMMENT 'FUNCTION' LANGUAGE C NAME 'stock_f' LIBRARY '/usr/
local/lib'" ) or die( symfoware_errormsg( $connection_id ) ) ;
$result_id = symfoware_procedurecolumns( $connection_id, "RDBDB", "STOCKS", "STOCK%", "%" ) ;
if( ! $result_id ) {
die( symfoware_errormsg( $connection_id ) ) ;
}
$c = 0 ;
while( symfoware_fetch_row( $result_id ) ) {
$c ++ ;
printf( "(%d)¥n", $c ) ;
printf( "TABLE_CAT : %s¥n", symfoware_result( $result_id, 1 ) ) ;
printf( "TABLE_SCHEM : %s¥n", symfoware_result( $result_id, 2 ) ) ;
printf( "TABLE_NAME : %s¥n", symfoware_result( $result_id, 3 ) ) ;
printf( "COLUMN_NAME : %s¥n", symfoware_result( $result_id, 4 ) ) ;
printf( "COLUMN_TYPE : %d¥n", symfoware_result( $result_id, 5 ) ) ;
printf( "DATA_TYPE : %s¥n", symfoware_result( $result_id, 6 ) ) ;
printf( "TYPE_NAME : %s¥n", symfoware_result( $result_id, 7 ) ) ;
printf( "COLUMN_SIZE : %d¥n", symfoware_result( $result_id, 8 ) ) ;
printf( "BUFFER_LENGTH : %d¥n", symfoware_result( $result_id, 9 ) ) ;
printf( "DECIMAL_DIGITS : %d¥n", symfoware_result( $result_id, 10 ) ) ;
printf( "NUM_PREC_RADIX : %d¥n", symfoware_result( $result_id, 11 ) ) ;
printf( "NULLABLE : %s¥n", symfoware_result( $result_id, 12 ) ? "TRUE" : "FALSE" ) ;
printf( "REMARKS : %s¥n", symfoware_isnull( $result_id, 13 ) ? "NULL" :
symfoware_result( $result_id, 13 ) ) ;
printf( "COLUMN_DEF : %s¥n", symfoware_isnull( $result_id, 14 ) ? "NULL" :
symfoware_result( $result_id, 14 ) ) ;
printf( "SQL_DATA_TYPE : %d¥n", symfoware_result( $result_id, 15 ) ) ;
printf( "SQL_DATETIME_SUB : " . ( symfoware_isnull( $result_id, 16 ) ? "%s¥n" : "%d¥n" ) ,
symfoware_isnull( $result_id, 16 ) ? "NULL" : symfoware_result( $result_id, 16 ) ) ;
printf( "CHAR_OCTET_LENGTH : " . ( symfoware_isnull( $result_id, 17 ) ? "%s¥n" : "%d¥n" ) ,
symfoware_isnull( $result_id, 16 ) ? "NULL" : symfoware_result( $result_id, 16 ) ) ;
printf( "ORDINAL_POSITION : %d¥n", symfoware_result( $result_id, 18 ) ) ;
printf( "IS_NULLABLE : %s¥n", symfoware_result( $result_id, 19 ) ) ;
}
symfoware_close( $connection_id ) ;
?>
</PRE>
</BODY>
</HTML>
- 50 -
4.2.37 symfoware_procedures
説明
symfoware_proceduresは、データベース中に存在するユーザが作成したプロシジャルーチンおよびファンクションルーチンに関する情
報を取得するための結果IDを返却します。
構文
int symfoware_procedures( int connection_id [, string database_name [, string schema_name [, string routine_name ]]] ) ;
パラメタ
connection_id :
接続IDを指定してください。
database_name :
データベース名を指定してください。
schema_name :
スキーマ名を指定してください。
スキーマ名に検索パターン文字を指定することができます。0個以上の文字に合致させる場合は"%"を指定してください。
routine_name :
プロシジャルーチン名またはファンクションルーチン名を指定してください。
ルーチン名に検索パターン文字を指定することができます。0個以上の文字に合致させる場合は"%"を指定してください。
戻り値
結果IDが返却されます。結果IDをフェッチすることにより、プロシジャルーチン、ファンクションルーチンに関する情報を得ることができ
ます。情報の列番号と値を以下に示します。
列番号 値
1 データベース名が設定されます。
2 スキーマ名が設定されます。
3 プロシジャルーチン名、ファンクションルーチン名が
設定されます。
4 0が設定されます。
5 0が設定されます。
6 0が設定されます。
7 空文字列が設定されます。
8 プロシジャルーチンの場合、1が設定されます。
ファンクションルーチンの場合、2が設定されます。
異常の場合、FALSEが返却されます。
例
<HTML>
<BODY>
<PRE>
<?php
$connection_id = symfoware_connect( "RDBDB", "rdbmng", "******" ) or die( symfoware_errormsg() ) ;
@symfoware_exec( $connection_id, "DROP TABLE STOCKS.STOCK CASCADE" ) ;
@symfoware_exec( $connection_id, "DROP PROCEDURE STOCKS.STOCK_P CASCADE" ) ;
- 51 -
@symfoware_exec( $connection_id, "DROP FUNCTION STOCKS.STOCK_F CASCADE" ) ;
symfoware_exec( $connection_id, "CREATE TABLE STOCKS.STOCK ( PRODUCT_NUMBER INTEGER NOT NULL,
PRODUCT_NAME CHAR(20) NOT NULL, STOCK_QUANTITY INTEGER, WAREHOUSE_NUMBER SMALLINT NOT NULL ) ON
DBSP1" ) or die( symfoware_errormsg( $connection_id ) ) ;
symfoware_exec( $connection_id, "CREATE PROCEDURE STOCKS.STOCK_P ( IN PRODUCT_NUMBER INTEGER, IN
PRODUCT_NAME CHAR(20), INOUT STOCK_QUANTITY INTEGER, INOUT WAREHOUSE_NUMBER SMALLINT ) COMMENT
'PROCEDURE' BEGIN INSERT INTO STOCKS.STOCK VALUES( PRODUCT_NUMBER, PRODUCT_NAME, STOCK_QUANTITY,
WAREHOUSE_NUMBER ) ; COMMIT WORK ; SET STOCK_QUANTITY = STOCK_QUANTITY + 1 ; SET WAREHOUSE_NUMBER =
WAREHOUSE_NUMBER + 1 ; END" ) or die( symfoware_errormsg( $connection_id ) ) ;
symfoware_exec( $connection_id, "CREATE FUNCTION STOCKS.STOCK_F ( IN INTEGER, IN CHAR(20), IN
INTEGER, IN SMALLINT ) RETURNS INTEGER COMMENT 'FUNCTION' LANGUAGE C NAME 'stock_f' LIBRARY '/usr/
local/lib'" ) or die( symfoware_errormsg( $connection_id ) ) ;
$result_id = symfoware_procedures( $connection_id, "RDBDB", "STOCKS", "STOCK%" ) ;
if( ! $result_id ) {
die( symfoware_errormsg( $connection_id ) ) ;
}
$c = 0 ;
while( symfoware_fetch_row( $result_id ) ) {
$c ++ ;
printf( "(%d)¥n", $c ) ;
printf( "PROCEDURE_CAT : %s¥n", symfoware_result( $result_id, 1 ) ) ;
printf( "PROCEDURE_SCHEM : %s¥n", symfoware_result( $result_id, 2 ) ) ;
printf( "PROCEDURE_NAME : %s¥n", symfoware_result( $result_id, 3 ) ) ;
printf( "NUM_INOUT_PARAMS : %d¥n", symfoware_result( $result_id, 4 ) ) ;
printf( "NUM_OUTPUT_PARAMS : %d¥n", symfoware_result( $result_id, 5 ) ) ;
printf( "NUM_RESULT_SETS : %d¥n", symfoware_result( $result_id, 6 ) ) ;
printf( "REMARKS : %s¥n", symfoware_isnull( $result_id, 7 ) ? "NULL" :
symfoware_result( $result_id, 7 ) ) ;
printf( "PROCEDURE_TYPE : %d¥n", symfoware_result( $result_id, 8 ) ) ;
}
symfoware_close( $connection_id ) ;
?>
</PRE>
</BODY>
</HTML>
4.2.38 symfoware_result
説明
symfoware_resultは、フェッチで位置付けられた行の値を返却します。
構文
string symfoware_result( int result_id, mixed field_name_or_number ) ;
パラメタ
result_id :
結果IDを指定してください。
field_name_or_number :
列名を指定してください。または、1以上の数値で列番号を指定してください。
戻り値
文字列が返却されます。
異常の場合、空文字列が返却されます。
- 52 -
例
“4.2.18 symfoware_fetch_row”の“例”を参照してください。
4.2.39 symfoware_result_all
説明
symfoware_result_allは、HTMLテーブルとして結果を出力し、復帰値を返却します。
構文
int symfoware_result_all( int result_id [, string format ] ) ;
パラメタ
result_id :
結果IDを指定してください。
format :
<TABLE>タグに指定する文字列を指定してください。
戻り値
行数が返却されます。
異常の場合、FALSEが返却されます。
例
<HTML>
<BODY>
<PRE>
<?php
$connection_id = symfoware_connect( "RDBDB", "rdbmng", "******" ) or die( symfoware_errormsg() ) ;
@symfoware_exec( $connection_id, "DROP TABLE STOCKS.STOCK CASCADE" ) ;
symfoware_exec( $connection_id, "CREATE TABLE STOCKS.STOCK ( PRODUCT_NUMBER INTEGER NOT NULL,
PRODUCT_NAME CHAR(20) NOT NULL, STOCK_QUANTITY INTEGER, WAREHOUSE_NUMBER SMALLINT NOT NULL ) ON
DBSP1" ) or die( symfoware_errormsg( $connection_id ) ) ;
symfoware_exec( $connection_id, "INSERT INTO STOCKS.STOCK VALUES( 140, 'cassette deck', 120, 2 )" )
or die( symfoware_errormsg( $connection_id ) ) ;
symfoware_exec( $connection_id, "INSERT INTO STOCKS.STOCK VALUES( 110, 'television', 85, 2 )" ) or
die( symfoware_errormsg( $connection_id ) ) ;
$result_id = symfoware_prepare( $connection_id, "SELECT * FROM STOCKS.STOCK ORDER BY PRODUCT_NAME" )
or die( symfoware_errormsg( $connection_id ) ) ;
symfoware_execute( $result_id ) ;
$rc = symfoware_result_all( $result_id, "bgcolor='#9999cc' border=3 width=30%" ) ;
printf( "rc : %d¥n", $rc ) ;
symfoware_close( $connection_id ) ;
?>
</PRE>
</BODY>
</HTML>
4.2.40 symfoware_rollback
説明
symfoware_rollbackは、データベースをロールバックし、復帰値を返却します。
- 53 -
構文
int symfoware_rollback( int connection_id ) ;
パラメタ
connection_id :
接続IDを指定してください。
戻り値
TRUEが返却されます。
異常の場合、FALSEが返却されます。
例
“4.2.1 symfoware_autocommit”の“例”を参照してください。
4.2.41 symfoware_setoption
説明
symfoware_setoptionは未サポートです。
symfoware_setoptionを使用したときの動作は不定です。
4.2.42 symfoware_specialcolumns
説明
symfoware_specialcolumnsは未サポートです。
symfoware_specialcolumnsを使用したときの動作は不定です。
4.2.43 symfoware_statistics
説明
symfoware_statisticsは未サポートです。
symfoware_statisticsを使用したときの動作は不定です。
4.2.44 symfoware_tableprivileges
説明
symfoware_tableprivilegesは未サポートです。
symfoware_tableprivilegesを使用したときの動作は不定です。
4.2.45 symfoware_tables
説明
symfoware_tablesは、データベース中に存在するユーザが作成した表、ビュー表および一時表に関する情報を取得するための結果IDを返却します。
構文
int symfoware_tables( int connection_id [, string database_name [, string schema_name [, string table_name [, string type ]]]] ) ;
- 54 -
パラメタ
connection_id :
接続IDを指定してください。
database_name :
データベース名を指定してください。
データベース名に検索パターン文字を指定することができます。0個以上の文字に合致させる場合は"%"を指定してください。
schema_name :
スキーマ名を指定してください。
スキーマ名に検索パターン文字を指定することができます。0個以上の文字に合致させる場合は"%"を指定してください。
table_name :
表名、ビュー表名または一時表名のいずれかを指定してください。
表名に検索パターン文字を指定することができます。0個以上の文字に合致させる場合は"%"を指定してください。
type :
表名の形式の文字列を指定してください。文字列と意味を以下に示します。
値 意味
"TABLE" 実表
"VIEW" ビュー表
"GROBAL TEMPORARY" 一時表
複数の形式を指定するときは、形式ごとに引用符でくくってコンマ区切りで連結した文字列を指定してください。
戻り値
結果IDが返却されます。結果IDをフェッチすることにより、表、ビュー表および一時表に関する情報を得ることができます。情報の列番
号と値を以下に示します。
列番号 値
1 データベース名が設定されます。
2 スキーマ名が設定されます。
3 表名、ビュー表名、一時表名が設定されます。
4 表の場合、"TABLE"が設定されます。
ビュー表の場合、"VIEW"が設定されます。
一時表の場合、"GROBAL TEMPORARY"が設定
されます。
5 NULLが設定されます。
異常の場合、FALSEが返却されます。
例
<HTML>
<BODY>
<PRE>
<?php
$connection_id = symfoware_connect( "RDBDB", "rdbmng", "******" ) or die( symfoware_errormsg() ) ;
@symfoware_exec( $connection_id, "DROP TABLE STOCKS.STOCK CASCADE" ) ;
@symfoware_exec( $connection_id, "DROP TABLE STOCKS.STOCK_T CASCADE" ) ;
symfoware_exec( $connection_id, "CREATE TABLE STOCKS.STOCK ( PRODUCT_NUMBER INTEGER NOT NULL,
- 55 -
PRODUCT_NAME CHAR(20) NOT NULL, STOCK_QUANTITY INTEGER, WAREHOUSE_NUMBER SMALLINT NOT NULL ) ON
DBSP1" ) or die( symfoware_errormsg( $connection_id ) ) ;
symfoware_exec( $connection_id, "CREATE VIEW STOCKS.STOCK_V COMMENT 'VIEW' AS SELECT PRODUCT_NUMBER,
PRODUCT_NAME FROM STOCKS.STOCK WHERE PRODUCT_NAME = 'cassette deck'" ) or
die( symfoware_errormsg( $connection_id ) ) ;
symfoware_exec( $connection_id, "CREATE GLOBAL TEMPORARY TABLE STOCKS.STOCK_T ( PRODUCT_NUMBER
INTEGER NOT NULL, PRODUCT_NAME CHAR(20) NOT NULL, STOCK_QUANTITY INTEGER, WAREHOUSE_NUMBER SMALLINT
NOT NULL ) ON COMMIT PRESERVE ROWS COMMENT 'VIEW' ON DBSP1 2" ) or
die( symfoware_errormsg( $connection_id ) ) ;
$result_id = symfoware_tables( $connection_id, "RDBDB", "STOCKS", "STOCK%", "'TABLE','VIEW'" ) ;
if( ! $result_id ) {
die( symfoware_errormsg( $connection_id ) ) ;
}
$c = 0 ;
while( symfoware_fetch_row( $result_id ) ) {
$c ++ ;
printf( "(%d)¥n", $c ) ;
printf( "TABLE_CAT : %s¥n", symfoware_result( $result_id, 1 ) ) ;
printf( "TABLE_SCHEM : %s¥n", symfoware_result( $result_id, 2 ) ) ;
printf( "TABLE_NAME : %s¥n", symfoware_result( $result_id, 3 ) ) ;
printf( "TABLE_TYPE : %s¥n", symfoware_result( $result_id, 4 ) ) ;
printf( "REMARKS : %s¥n", symfoware_isnull( $result_id, 5 ) ? "NULL" :
symfoware_result( $result_id, 5 ) ) ;
}
symfoware_close( $connection_id ) ;
?>
</PRE>
</BODY>
</HTML>
- 56 -
第5章 PEAR for Symfowareの仕様
本章では、PEAR for Symfowareを用いてSymfoware/RDBのデータベースをアクセスするときの仕様について説明します。
5.1 PEAR for Symfowareの概要
5.2 DBクラスのインクルード
5.3 DBクラス
5.4 DB_Resultクラス
5.5 DB_Errorクラス
5.6 DB_Warningクラス
5.7 Cacheクラス
5.1 PEAR for Symfowareの概要
PEAR for Symfowareの概要について説明します。
5.1.1 PEARの特徴
PEARの特徴について説明します。
PEARの特徴
PEARは、PHP 4で開発されたクラスライブラリで、PHP 4に同梱されています。
PEARは、データベースアクセスやキャッシュなどの機能がクラス化されています。
PEARは、PHPスクリプトで記述されているため、PEARのクラスの処理を参照したり、処理を修正することが可能です。
今後は、PEARが有用なクラスライブラリ群に発展すると考えられます。しかし、PEARは発展段階であり、将来的に一部の機能のイン
タフェースが変更となる可能性が考えられます。
5.1.2 PEAR for Symfowareのスクリプト例
PEAR for Symfowareのスクリプト例について説明します。
PEAR for Symfowareのスクリプト例
本章の例は、主に以下のPHPスクリプトをベースにしたものを用いています。以下のPHPスクリプトを実行させるためには、ユー
ザ“rdbmng”がデータベース“RDBDB”、データベーススペース“DBSP1”、スキーマ“STOCKS”を定義しておく必要があります。
<HTML>
<BODY>
<PRE>
<?php
// 1.
require_once( "DB.php" ) ;
// 2.
$db = DB::connect( "symfoware://rdbmng:******@RDBDB" ) ;
if( DB::isError( $db ) ) die( $db->toString() ) ;
// 3.
$db->query( "DROP TABLE STOCKS.STOCK CASCADE" ) ;
$result = $db->query( "CREATE TABLE STOCKS.STOCK ( PRODUCT_NUMBER INTEGER NOT NULL, PRODUCT_NAME
CHAR(20) NOT NULL, STOCK_QUANTITY INTEGER, WAREHOUSE_NUMBER SMALLINT NOT NULL ) ON DBSP1" ) ;
if( DB::isError( $result ) ) die( $result->toString() ) ;
$result = $db->query( "INSERT INTO STOCKS.STOCK VALUES( 140, 'cassette deck', 120, 2 )" ) ;
- 57 -
if( DB::isError( $result ) ) die( $result->toString() ) ;
$result = $db->query( "INSERT INTO STOCKS.STOCK VALUES( 110, 'television', 85, 2 )" ) ;
if( DB::isError( $result ) ) die( $result->toString() ) ;
// 4.
$result = $db->query( "SELECT * FROM STOCKS.STOCK" ) ;
if( DB::isError( $result ) ) die( $result->toString() ) ;
// 5.
while( $values = $result->fetchRow() ) {
for( $x = 0 ; $x < $result->numCols() ; $x ++ ) {
if( $x != 0 ) printf( " " ) ;
printf( "%s", $values[ $x ] ) ;
}
printf( "¥n" ) ;
}
// 6.
$db->disconnect() ;
?>
</PRE>
</BODY>
</HTML>
1. DBクラスを取り込みます。
2. データベースに接続し、DBオブジェクト“db”を獲得します。DBオブジェクトが取得できないときは、例外を発行します。
3. DBオブジェクト“db”を用いて、SQL文を実行します。復帰値が正常でないときは、例外を発行します。
4. DBオブジェクト“db”を用いて、SQL文を準備および実行し、DB_Resultオブジェクト“result”を取得します。結果オブジェクトが取
得できないときは、例外を発行します。
5. DB_Resultオブジェクト“result”を用いてフェッチします。
6. DBオブジェクト“db”を用いて、データベースの接続を切断します。復帰値が正常でないときは、例外を発行します。
上記のほかに、性能を考慮した記述方法、複数の記述を簡略するための記述方法など、PEARは豊富なインタフェースを持っていま
す。
5.2 DBクラスのインクルード
DBクラスのインクルードについて説明します。
5.2.1 require_once( "DB.php" )
説明
require_once( "DB.php" )は、DBクラスをPHPスクリプトに取り込みます。
構文
require_once( "DB.php" ) ;
5.3 DBクラス
DBクラスについて説明します。
5.3.1 connect
- 58 -
説明
connectは、データベースに接続し、DBオブジェクトを返却します。
構文
mixed connect( string data_source [, boolean option ] ) ;
パラメタ
data_source :
データソース名を指定してください。
データソース名を文字列で指定する場合
Symfoware/RDBにローカルアクセスする場合、"symfoware://認可識別子:パスワード@データベース名"または"symfoware://認可
識別子:パスワード@データベース名;パラメタ"を指定してください。
Symfoware/RDBにリモートアクセスする場合、"symfoware://認可識別子:パスワード@データベース名,ホスト名,ポート番号"また
は"symfoware://認可識別子:パスワード@データベース名,ホスト名,ポート番号;パラメタ"を指定してください。
認可識別子、パスワードまたはデータベース名のいずれかを省略する場合、認可識別子、パスワードおよびデータベース名を区
切る記号のセミコロン(:)およびアットマーク(@)は省略しないでください。
パラメタについては、“付録A connect、pconnectのパラメタの記述形式”を参照してください。
データソース名を連想配列で指定する場合
Symfoware/RDBにローカルアクセスする場合、下記の連想配列を指定してください。
$data_source = array(
'phptype' => "symfoware",
'username' => "認可識別子",
'password' => "パスワード",
'hostspec' => "データベース名"
) ;
または、
$data_source = array(
'phptype' => "symfoware",
'username' => "認可識別子",
'password' => "パスワード",
'hostspec' => "データベース名,ホスト名,ポート番号;"
) ;
Symfoware/RDBにリモートアクセスする場合、下記の連想配列を指定してください。
$data_source = array(
'phptype' => "symfoware",
'username' => "認可識別子",
'password' => "パスワード",
'hostspec' => "データベース名,ホスト名,ポート番号"
) ;
または、
$data_source = array(
'phptype' => "symfoware",
'username' => "認可識別子",
'password' => "パスワード",
'hostspec' => "データベース名,ホスト名,ポート番号;パラメタ"
) ;
パラメタについては、“付録A connect、pconnectのパラメタの記述形式”を参照してください。
- 59 -
option :
持続的な接続とする場合、TRUEを指定してください。
持続的な接続としない場合、FALSEを指定してください、または省略してください。
戻り値
DBオブジェクトが返却されます。
異常の場合、DB_Errorオブジェクトが返却されます。
例
<HTML>
<BODY>
<PRE>
<?php
require_once( "DB.php" ) ;
$db = DB::connect( "symfoware://rdbmng:******@RDBDB" ) ;
if( DB::isError( $db ) ) {
die( $db->toString() ) ;
}
$db->query( "DROP TABLE STOCKS.STOCK CASCADE" ) ;
$result = $db->query( "CREATE TABLE STOCKS.STOCK ( PRODUCT_NUMBER INTEGER NOT NULL, PRODUCT_NAME
CHAR(20) NOT NULL, STOCK_QUANTITY INTEGER, WAREHOUSE_NUMBER SMALLINT NOT NULL ) ON DBSP1" ) ;
if( DB::isError( $result ) ) die( $result->toString() ) ;
$result = $db->query( "INSERT INTO STOCKS.STOCK VALUES( 140, 'cassette deck', 120, 2 )" ) ;
if( DB::isError( $result ) ) die( $result->toString() ) ;
$result = $db->query( "INSERT INTO STOCKS.STOCK VALUES( 110, 'television', 85, 2 )" ) ;
if( DB::isError( $result ) ) die( $result->toString() ) ;
$result = $db->query( "SELECT * FROM STOCKS.STOCK" ) ;
if( DB::isError( $result ) ) die( $result->toString() ) ;
while( $values = $result->fetchRow() ) {
for( $x = 0 ; $x < $result->numCols() ; $x ++ ) {
if( $x != 0 ) printf( " " ) ;
printf( "%s", $values[ $x ] ) ;
}
printf( "¥n" ) ;
}
$db->disconnect() ;
?>
</PRE>
</BODY>
</HTML>
5.3.2 disconnect
説明
disconnectは、データベースを切断し、復帰値を返却します。
構文
boolean disconnect( void ) ;
戻り値
TRUEが返却されます。
異常の場合、FALSEが返却されます。
- 60 -
例
“5.3.1 connect”の“例”を参照してください。
5.3.3 isWarning
説明
isWarningは未サポートです。
isWarningを使用したときの動作は不定です。
現状、DBクラスのメソッドでSymfoware/RDBのエラーが発生したときは、エラーコードかDB_Errorオブジェクトのみを返却し、DB_Warningオブジェクトを返却することはありません。
将来的に、DBクラスのメソッドでSymfoware/RDBのエラーが発生したときに、DB_Warningオブジェクトを返却することがあると考えられ
ます。
5.3.4 isError
説明
isErrorは、DBクラスのメソッドが返却したDB_Errorオブジェクトがエラー状態か否かを返却します。
構文
boolean isError( DB_Error db_error ) ;
パラメタ
db_error :
DB_Errorオブジェクトを指定してください。
戻り値
DB_Errorオブジェクトがエラー状態の場合、TRUEが返却されます。
DB_Errorオブジェクトがエラー状態でない場合、または、DB_Errorオブジェクトでない場合、FALSEが返却されます。
例
“5.3.27 errorNative”の“例”を参照してください。
5.3.5 quote
説明
quoteは、指定した値をSQL文の文字列定数の形式に整形して、文字列を返却します。
構文
mixed quote( string value ) ;
パラメタ
value :
値を指定してください。
空文字列を指定した場合、NULLが返却されます。
戻り値
整形した文字列が返却されます。
- 61 -
例
<HTML>
<BODY>
<PRE>
<?php
require_once( "DB.php" ) ;
$db = DB::connect( "symfoware://rdbmng:******@RDBDB" ) ;
$str = $db->quote( "Don't" ) ;
printf( "%s¥n", $str ) ;
$str = $db->quote( 1000 ) ;
printf( "%s¥n", $str ) ;
$db->disconnect() ;
?>
</PRE>
</BODY>
</HTML>
5.3.6 provides
説明
providesは、指定した機能をサポートしているか否かを返却します。
構文
boolean provides( string feature ) ;
パラメタ
feature :
prepareがサポートされているか否かを獲得する場合、"prepare"を指定してください。
pconnectがサポートされているか否かを獲得する場合、"pconnect"を指定してください。
transactionsがサポートされているか否かを獲得する場合、"transactions"を指定してください。
戻り値
指定した機能がサポートされている場合、TRUEが返却されます。
指定した機能がサポートされていない場合、FALSEが返却されます。
例
<HTML>
<BODY>
<PRE>
<?php
require_once( "DB.php" ) ;
$db = DB::connect( "symfoware://rdbmng:******@RDBDB" ) ;
printf( "prepare : %s¥n", $db->provides( "prepare" ) ? "TRUE" : "FALSE" ) ;
printf( "pconnect : %s¥n", $db->provides( "pconnect" ) ? "TRUE" : "FALSE" ) ;
printf( "transactions : %s¥n", $db->provides( "transactions" ) ? "TRUE" : "FALSE" ) ;
$db->disconnect() ;
?>
</PRE>
</BODY>
</HTML>
- 62 -
5.3.7 setFetchMode
説明
setFetchModeは、フェッチの取得モードを設定します。
構文
mixed setFetchMode( int fetch_mode [, string class_name ] ) ;
パラメタ
fetch_mode :
フェッチした行の値を配列で獲得する場合、DB_FETCHMODE_ORDEREDを指定してください。
フェッチした行の値を列名で対応付けた連想配列で獲得する場合、DB_FETCHMODE_ASSOCを指定してください。
フェッチした行の値をDB_Rowオブジェクトで獲得する場合、DB_FETCHMODE_OBJECTを指定してください。
class_name :
DB_FETCHMODE_OBJECTを指定した場合、fetchメソッドにより返却されるオブジェクトのクラス名を指定してください。
DB_FETCHMODE_OBJECTを指定した場合で、連想配列をオブジェクトにキャストしたものを獲得する場合、省略してください。
戻り値
何も返却されません。
異常の場合、PEAR_ERRORが返却されます。
例
<HTML>
<BODY>
<PRE>
<?php
require_once( "DB.php" ) ;
$db = DB::connect( "symfoware://rdbmng:******@RDBDB" ) ;
if( DB::isError( $db ) ) die( $db->toString() ) ;
$db->query( "DROP TABLE STOCKS.STOCK CASCADE" ) ;
$result = $db->query( "CREATE TABLE STOCKS.STOCK ( PRODUCT_NUMBER INTEGER NOT NULL, PRODUCT_NAME
CHAR(20) NOT NULL, STOCK_QUANTITY INTEGER, WAREHOUSE_NUMBER SMALLINT NOT NULL ) ON DBSP1" ) ;
if( DB::isError( $result ) ) die( $result->toString() ) ;
$result = $db->query( "INSERT INTO STOCKS.STOCK VALUES( 140, 'cassette deck', 120, 2 )" ) ;
if( DB::isError( $result ) ) die( $result->toString() ) ;
$result = $db->query( "INSERT INTO STOCKS.STOCK VALUES( 110, 'television', 85, 2 )" ) ;
if( DB::isError( $result ) ) die( $result->toString() ) ;
$db->setFetchMode( DB_FETCHMODE_ORDERED ) ;
$result = $db->query( "SELECT * FROM STOCKS.STOCK" ) ;
if( DB::isError( $result ) ) die( $result->toString() ) ;
for( ; ; ) {
$values = $result->fetchRow() ;
if( DB::isError( $values ) ) {
die( $values->toString() ) ;
}
if( is_null( $values ) ) {
break ;
}
printf( "%d¥n", $values[ 0 ] ) ;
printf( "%s¥n", $values[ 1 ] ) ;
printf( "%d¥n", $values[ 2 ] ) ;
printf( "%d¥n", $values[ 3 ] ) ;
}
$db->setFetchMode( DB_FETCHMODE_ASSOC ) ;
- 63 -
$result = $db->query( "SELECT * FROM STOCKS.STOCK" ) ;
if( DB::isError( $result ) ) die( $result->toString() ) ;
for( ; ; ) {
$values = $result->fetchRow() ;
if( DB::isError( $values ) ) {
die( $values->toString() ) ;
}
if( is_null( $values ) ) {
break ;
}
printf( "%d¥n", $values["PRODUCT_NUMBER"] ) ;
printf( "%s¥n", $values["PRODUCT_NAME"] ) ;
printf( "%d¥n", $values["STOCK_QUANTITY"] ) ;
printf( "%d¥n", $values["WAREHOUSE_NUMBER"] ) ;
}
$db->setFetchMode( DB_FETCHMODE_OBJECT ) ;
$result = $db->query( "SELECT * FROM STOCKS.STOCK" ) ;
if( DB::isError( $result ) ) die( $result->toString() ) ;
for( ; ; ) {
$db_row = $result->fetchRow() ;
if( DB::isError( $db_row ) ) {
die( $db_row->toString() ) ;
}
if( is_null( $db_row ) ) {
break ;
}
printf( "%d¥n", $db_row->PRODUCT_NUMBER ) ;
printf( "%s¥n", $db_row->PRODUCT_NAME ) ;
printf( "%d¥n", $db_row->STOCK_QUANTITY ) ;
printf( "%d¥n", $db_row->WAREHOUSE_NUMBER ) ;
}
$db->disconnect() ;
?>
</PRE>
</BODY>
</HTML>
5.3.8 prepare
説明
prepareは、SQL文を準備し、クエリハンドルを返却します。
構文
resource prepare( string statement ) ;
パラメタ
statement :
SQL文を指定してください。
execute、executeMultipleで指定する配列の値をシングルクォーテーション(')で囲んだ定数値にしてSQL文を組み立てる場合、SQL文の値指定に動的パラメタと同様に“?”を指定してください。
execute、executeMultipleで指定する配列の値をそのままの形の定数値にしてSQL文を組み立てる場合、SQL文の値指定に動的パラ
メタの代わりに“!”を指定してください。
execute、executeMultipleで指定する配列の値を存在するファイル名として扱い、ファイルから読み込んだ値を定数値にしてSQL文を
組み立てる場合、SQL文の値指定に動的パラメタの代わりに“&”を指定してください。
- 64 -
“?”、“!”、“&”は、動的パラメタで実現しているわけではなく、prepre、execute、executeMultipleの処理でSQL文の組み立て直しを行っ
ていることに注意してください。また、execute、executeMultipleで毎回SQL文の解析を行っており、prepareとexecute、executeMultipleの組み合わせで同じSQL文を実行するときの性能の向上を図ることができるわけではないことに注意してください。
戻り値
クエリハンドルが返却されます。
例
“5.3.9 execute”の“例”、“5.3.10 executeMultiple”の“例”を参照してください。
5.3.9 execute
説明
executeは、prepareで指定したSQL文と指定された配列の値からSQL文を組み立てて、実行します。
構文
mixed execute( resource query_handle[, array params ]) ;
パラメタ
query_handle :
クエリハンドルを指定してください。
params :
prepareで指定したSQL文中の“?”、“!”、“&”に対応する値の配列を指定してください。
戻り値
SQL文が動的SELECT文の場合、DB_Resultオブジェクトが返却されます。
SQL文が動的SELECT文以外の場合、DB_OKが返却されます。
異常の場合、DB_Errorオブジェクトが返却されます。
例
<HTML>
<BODY>
<PRE>
<?php
require_once( "DB.php" ) ;
$db = DB::connect( "symfoware://rdbmng:******@RDBDB" ) ;
if( DB::isError( $db ) ) die( $db->toString() ) ;
$db->query( "DROP TABLE STOCKS.STOCK CASCADE" ) ;
$result = $db->query( "CREATE TABLE STOCKS.STOCK ( PRODUCT_NUMBER INTEGER NOT NULL, PRODUCT_NAME
CHAR(20) NOT NULL, STOCK_QUANTITY INTEGER, WAREHOUSE_NUMBER SMALLINT NOT NULL ) ON DBSP1" ) ;
if( DB::isError( $result ) ) die( $result->toString() ) ;
$query_handle = $db->prepare( "INSERT INTO STOCKS.STOCK VALUES( !, ?, !, ! )" ) ;
$params = array( 140, "cassette deck", 120, 2 ) ;
$result = $db->execute( $query_handle, $params ) ;
if( DB::isError( $result ) ) {
die( $result->toString() ) ;
}
$params = array( 110, "television", 85, 2 ) ;
$result = $db->execute( $query_handle, $params ) ;
if( DB::isError( $result ) ) {
die( $result->toString() ) ;
}
$params = array( 999, "unknown", 999, 999 ) ;
- 65 -
$result = $db->execute( $query_handle, $params ) ;
if( DB::isError( $result ) ) {
die( $result->toString() ) ;
}
$query_handle = $db->prepare( "SELECT * FROM STOCKS.STOCK WHERE PRODUCT_NUMBER BETWEEN ! AND !" ) ;
$params = array( 110, 140 ) ;
$result = $db->execute( $query_handle, $params ) ;
if( DB::isError( $result ) ) {
die( $result->toString() ) ;
}
while( $values = $result->fetchRow() ) {
for( $x = 0 ; $x < $result->numCols() ; $x ++ ) {
if( $x != 0 ) printf( " " ) ;
printf( "%s", $values[ $x ] ) ;
}
printf( "¥n" ) ;
}
$db->disconnect() ;
?>
</PRE>
</BODY>
</HTML>
5.3.10 executeMultiple
説明
executeMultipleは、指定された配列数分、executeを呼び出します。
構文
mixed executeMultiple( resource query_handle, array params ) ;
パラメタ
query_handle :
クエリハンドルを指定してください。
params :
prepareで指定したSQL文中の“?”、“!”、“&”に対応する値の配列の配列を指定してください。
戻り値
DB_Resultオブジェクトが返却されます。
異常の場合、DB_Errorオブジェクトが返却されます。
例
<HTML>
<BODY>
<PRE>
<?php
require_once( "DB.php" ) ;
$db = DB::connect( "symfoware://rdbmng:******@RDBDB" ) ;
if( DB::isError( $db ) ) die( $db->toString() ) ;
$db->query( "DROP TABLE STOCKS.STOCK CASCADE" ) ;
$result = $db->query( "CREATE TABLE STOCKS.STOCK ( PRODUCT_NUMBER INTEGER NOT NULL, PRODUCT_NAME
CHAR(20) NOT NULL, STOCK_QUANTITY INTEGER, WAREHOUSE_NUMBER SMALLINT NOT NULL ) ON DBSP1" ) ;
if( DB::isError( $result ) ) die( $result->toString() ) ;
$query_handle = $db->prepare( "INSERT INTO STOCKS.STOCK VALUES( !, ?, !, ! )" ) ;
$params = array(
- 66 -
array( 140, "cassette deck", 120, 2 ),
array( 110, "television", 85, 2 ),
array( 999, "unknown", 999, 999 )
) ;
$result = $db->executeMultiple( $query_handle, $params ) ;
if( DB::isError( $result ) ) {
die( $result->toString() ) ;
}
$query_handle = $db->prepare( "SELECT * FROM STOCKS.STOCK WHERE PRODUCT_NUMBER BETWEEN ! AND !" ) ;
$params = array( 110, 140 ) ;
$result = $db->execute( $query_handle, $params ) ;
if( DB::isError( $result ) ) die( $result->toString() ) ;
while( $values = $result->fetchRow() ) {
for( $x = 0 ; $x < $result->numCols() ; $x ++ ) {
if( $x != 0 ) printf( " " ) ;
printf( "%s", $values[ $x ] ) ;
}
printf( "¥n" ) ;
}
$db->disconnect() ;
?>
</PRE>
</BODY>
</HTML>
5.3.11 query
説明
queryは、SQL文を準備および実行し、DB_Resultオブジェクトを返却します。
構文
mixed query( string statement [, array params ] ) ;
パラメタ
statement :
SQL文を指定してください。
paramsで指定する配列の値をシングルクォーテーション(')で囲んだ定数値にしてSQL文を組み立てる場合、SQL文の値指定に動的
パラメタと同様に“?”を指定してください。
paramsで指定する配列の値をそのままの形の定数値でSQL文を組み立てる場合、SQL文の値指定に動的パラメタの代わりに“!”を指
定してください。
paramsで指定する配列の値を存在するファイル名として扱い、ファイルから読み込んだ値を定数値にしてSQL文を組み立てる場合、SQL文の値指定に動的パラメタの代わりに“&”を指定してください。
“?”、“!”、“&”は、動的パラメタで実現しているわけではなく、queryの処理でSQL文の組み立て直しを行っていることに注意してくださ
い。
params :
SQL文中の“?”、“!”、“&”に対応する値の配列の配列を指定してください。
戻り値
SQL文が動的SELECT文の場合、DB_Resultオブジェクトが返却されます。
SQL文が動的SELECT文以外の場合、DB_OKが返却されます。
異常の場合、DB_Errorオブジェクトが返却されます。
- 67 -
例
<HTML>
<BODY>
<PRE>
<?php
require_once( "DB.php" ) ;
$db = DB::connect( "symfoware://rdbmng:******@RDBDB" ) ;
if( DB::isError( $db ) ) die( $db->toString() ) ;
$db->query( "DROP TABLE STOCKS.STOCK CASCADE" ) ;
$result = $db->query( "CREATE TABLE STOCKS.STOCK ( PRODUCT_NUMBER INTEGER NOT NULL, PRODUCT_NAME
CHAR(20) NOT NULL, STOCK_QUANTITY INTEGER, WAREHOUSE_NUMBER SMALLINT NOT NULL ) ON DBSP1" ) ;
if( DB::isError( $result ) ) die( $result->toString() ) ;
$params = array( 140, "cassette deck", 120, 2 ) ;
$result = $db->query( "INSERT INTO STOCKS.STOCK VALUES( !, ?, !, ! )", $params ) ;
if( DB::isError( $result ) ) {
die( $result->toString() ) ;
}
$params = array( 110, "television", 85, 2 ) ;
$result = $db->query( "INSERT INTO STOCKS.STOCK VALUES( !, ?, !, ! )", $params ) ;
if( DB::isError( $result ) ) {
die( $result->toString() ) ;
}
$params = array( 999, "unknown", 999, 999 ) ;
$result = $db->query( "INSERT INTO STOCKS.STOCK VALUES( !, ?, !, ! )", $params ) ;
if( DB::isError( $result ) ) {
die( $result->toString() ) ;
}
$params = array( 110, 140 ) ;
$result = $db->query( "SELECT * FROM STOCKS.STOCK WHERE PRODUCT_NUMBER BETWEEN ! AND !", $params ) ;
if( DB::isError( $result ) ) {
die( $result->toString() ) ;
}
while( $values = $result->fetchRow() ) {
for( $x = 0 ; $x < $result->numCols() ; $x ++ ) {
if( $x != 0 ) printf( " " ) ;
printf( "%s", $values[ $x ] ) ;
}
printf( "¥n" ) ;
}
$db->disconnect() ;
?>
</PRE>
</BODY>
</HTML>
5.3.12 limitQuery
説明
limitQueryは未サポートです。
limitQueryを使用したときの動作は不定です。
5.3.13 getOne
説明
getOneは、prepare、execute、fetchRow、freeを呼び出し、先頭行の先頭列の値を返却します。
- 68 -
構文
mixed getOne( string statement [, array params ] ) ;
パラメタ
statement :
動的SELECT文を指定してください。
paramsで指定する配列の値をシングルクォーテーション(')で囲んだ定数値にしてSQL文を組み立てる場合、SQL文の値指定に動的
パラメタと同様に“?”を指定してください。
paramsで指定する配列の値をそのままの形の定数値にしてSQL文を組み立てる場合、SQL文の値指定に動的パラメタの代わりに“!”を指定してください。
paramsで指定する配列の値を存在するファイル名として扱い、ファイルから読み込んだ値を定数値にしてSQL文を組み立てる場合、SQL文の値指定に動的パラメタの代わりに“&”を指定してください。
“?”、“!”、“&”は、動的パラメタで実現しているわけではなく、prepre、executeの処理でSQL文の組み立て直しを行っていることに注意
してください。
params :
SQL文中の“?”、“!”、“&”に対応する値の配列の配列を指定してください。
戻り値
値が返却されます。
値がない場合、NULLが返却されます。
異常の場合、DB_Errorオブジェクトが返却されます。
例
<HTML>
<BODY>
<PRE>
<?php
require_once( "DB.php" ) ;
$db = DB::connect( "symfoware://rdbmng:******@RDBDB" ) ;
if( DB::isError( $db ) ) die( $db->toString() ) ;
$db->query( "DROP TABLE STOCKS.STOCK CASCADE" ) ;
$result = $db->query( "CREATE TABLE STOCKS.STOCK ( PRODUCT_NUMBER INTEGER NOT NULL, PRODUCT_NAME
CHAR(20) NOT NULL, STOCK_QUANTITY INTEGER, WAREHOUSE_NUMBER SMALLINT NOT NULL ) ON DBSP1" ) ;
if( DB::isError( $result ) ) die( $result->toString() ) ;
$result = $db->query( "INSERT INTO STOCKS.STOCK VALUES( 140, 'cassette deck', 120, 2 )" ) ;
if( DB::isError( $result ) ) die( $result->toString() ) ;
$result = $db->query( "INSERT INTO STOCKS.STOCK VALUES( 110, 'television', 85, 2 )" ) ;
if( DB::isError( $result ) ) die( $result->toString() ) ;
$values = array( 999 ) ;
$value = $db->getOne( "SELECT * FROM STOCKS.STOCK WHERE PRODUCT_NUMBER = !", $values ) ;
if( DB::isError( $value ) ) {
die( $value->toString() ) ;
}
if( is_null( $value ) ) {
printf( "no record¥n" ) ;
}
$value = $db->getOne( "SELECT * FROM STOCKS.STOCK ORDER BY PRODUCT_NUMBER" ) ;
if( DB::isError( $value ) ) {
die( $value->toString() ) ;
}
printf( "%s¥n", $value ) ;
$db->disconnect() ;
?>
</PRE>
- 69 -
</BODY>
</HTML>
5.3.14 getRow
説明
getRowは、prepare、execute、fetchRow、freeを呼び出し、先頭行の値の配列を返却します。
構文
mixed getRow( string statement [, array params [, int fetch_mode ] ] ) ;
パラメタ
statement :
動的SELECT文を指定してください。
paramsで指定する配列の値をシングルクォーテーション(')で囲んだ定数値にしてSQL文を組み立てる場合、SQL文の値指定に動的
パラメタと同様に“?”を指定してください。
paramsで指定する配列の値をそのままの形の定数値にしてSQL文を組み立てる場合、SQL文の値指定に動的パラメタの代わりに“!”を指定してください。
paramsで指定する配列の値を存在するファイル名として扱い、ファイルから読み込んだ値を定数値にしてSQL文を組み立てる場合、SQL文の値指定に動的パラメタの代わりに“&”を指定してください。
“?”、“!”、“&”は、動的パラメタで実現しているわけではなく、prepare、executeの処理でSQL文の組み立て直しを行っていることに注意
してください。
params :
SQL文中の“?”、“!”、“&”に対応する値の配列の配列を指定してください。
fetch_mode :
フェッチした行の値を配列で獲得する場合、DB_FETCHMODE_ORDEREDを指定してください。
フェッチした行の値を列名で対応付けた連想配列で獲得する場合、DB_FETCHMODE_ASSOCを指定してください。
フェッチした行の値をDB_Rowオブジェクトで獲得する場合、DB_FETCHMODE_OBJECTを指定してください。
戻り値
値の配列、値の連想配列、または、DB_Rowオブジェクトが返却されます。
異常の場合、DB_Errorオブジェクトが返却されます。
例
<HTML>
<BODY>
<PRE>
<?php
require_once( "DB.php" ) ;
$db = DB::connect( "symfoware://rdbmng:******@RDBDB" ) ;
if( DB::isError( $db ) ) die( $db->toString() ) ;
$db->query( "DROP TABLE STOCKS.STOCK CASCADE" ) ;
$result = $db->query( "CREATE TABLE STOCKS.STOCK ( PRODUCT_NUMBER INTEGER NOT NULL, PRODUCT_NAME
CHAR(20) NOT NULL, STOCK_QUANTITY INTEGER, WAREHOUSE_NUMBER SMALLINT NOT NULL ) ON DBSP1" ) ;
if( DB::isError( $result ) ) die( $result->toString() ) ;
$result = $db->query( "INSERT INTO STOCKS.STOCK VALUES( 140, 'cassette deck', 120, 2 )" ) ;
if( DB::isError( $result ) ) die( $result->toString() ) ;
$result = $db->query( "INSERT INTO STOCKS.STOCK VALUES( 110, 'television', 85, 2 )" ) ;
if( DB::isError( $result ) ) die( $result->toString() ) ;
$params = array( 999 ) ;
- 70 -
$values = $db->getRow( "SELECT * FROM STOCKS.STOCK WHERE PRODUCT_NUMBER = !", $params ) ;
if( DB::isError( $values ) ) {
die( $values->toString() ) ;
}
if( is_null( $values ) ) {
printf( "no record¥n" ) ;
}
$values = $db->getRow( "SELECT * FROM STOCKS.STOCK ORDER BY PRODUCT_NUMBER" ) ;
if( DB::isError( $value ) ) {
die( $value->toString() ) ;
}
printf( "%d¥n", $values[0] ) ;
printf( "%s¥n", $values[1] ) ;
printf( "%d¥n", $values[2] ) ;
printf( "%d¥n", $values[3] ) ;
$params = array() ;
$values = $db->getRow( "SELECT * FROM STOCKS.STOCK", $params, DB_FETCHMODE_ASSOC ) ;
if( DB::isError( $values ) ) {
die( $value->toString() ) ;
}
printf( "%d¥n", $values["PRODUCT_NUMBER"] ) ;
printf( "%s¥n", $values["PRODUCT_NAME"] ) ;
printf( "%d¥n", $values["STOCK_QUANTITY"] ) ;
printf( "%d¥n", $values["WAREHOUSE_NUMBER"] ) ;
$params = array( 110 ) ;
$db_row = $db->getRow( "SELECT * FROM STOCKS.STOCK WHERE PRODUCT_NUMBER = !", $params,
DB_FETCHMODE_OBJECT ) ;
if( DB::isError( $db_row ) ) {
die( $db_row->toString() ) ;
}
printf( "%d¥n", $db_row->PRODUCT_NUMBER ) ;
printf( "%s¥n", $db_row->PRODUCT_NAME ) ;
printf( "%d¥n", $db_row->STOCK_QUANTITY ) ;
printf( "%d¥n", $db_row->WAREHOUSE_NUMBER ) ;
$db->disconnect() ;
?>
</PRE>
</BODY>
</HTML>
5.3.15 getCol
説明
getColは、prepare、execute、fetchRow、freeを呼び出し、指定した一列のすべての行の値の配列を返却します。
構文
mixed getCol( string statement [, mixed field_name_or_number [, array params ] ] ) ;
パラメタ
statement :
動的SELECT文を指定してください。
paramsで指定する配列の値をシングルクォーテーション(')で囲んだ値にしてSQL文を組み立てる場合、SQL文の値指定に動的パラ
メタと同様に“?”を指定してください。
paramsで指定する配列の値をそのままの形の定数値にしてSQL文を組み立てる場合、SQL文の値指定に動的パラメタの代わりに“!”を指定してください。
paramsで指定する配列の値を存在するファイル名として扱い、ファイルから読み込んだ値を定数値にしてSQL文を組み立てる場合、SQL文の値指定に動的パラメタの代わりに“&”を指定してください。
- 71 -
“?”、“!”、“&”は、動的パラメタで実現しているわけではなく、prepare、executeの処理でSQL文の組み立て直しを行っていることに注意
してください。
field_name_or_number :
列名を指定してください。または、0以上の数値で列番号を指定してください。
params :
SQL文中の“?”、“!”、“&”に対応する値の配列の配列を指定してください。
戻り値
配列で値が返却されます。
行がない場合、要素数が0個の配列が返却されます。
異常の場合、DB_Errorオブジェクトが返却されます。
例
<HTML>
<BODY>
<PRE>
<?php
require_once( "DB.php" ) ;
$db = DB::connect( "symfoware://rdbmng:******@RDBDB" ) ;
if( DB::isError( $db ) ) die( $db->toString() ) ;
$db->query( "DROP TABLE STOCKS.STOCK CASCADE" ) ;
$result = $db->query( "CREATE TABLE STOCKS.STOCK ( PRODUCT_NUMBER INTEGER NOT NULL, PRODUCT_NAME
CHAR(20) NOT NULL, STOCK_QUANTITY INTEGER, WAREHOUSE_NUMBER SMALLINT NOT NULL ) ON DBSP1" ) ;
if( DB::isError( $result ) ) die( $result->toString() ) ;
$result = $db->query( "INSERT INTO STOCKS.STOCK VALUES( 140, 'cassette deck', 120, 2 )" ) ;
if( DB::isError( $result ) ) die( $result->toString() ) ;
$result = $db->query( "INSERT INTO STOCKS.STOCK VALUES( 110, 'television', 85, 2 )" ) ;
if( DB::isError( $result ) ) die( $result->toString() ) ;
$result = $db->query( "INSERT INTO STOCKS.STOCK VALUES( 999, 'unknown', 999, 999 )" ) ;
if( DB::isError( $result ) ) die( $result->toString() ) ;
$values = $db->getCol( "SELECT * FROM STOCKS.STOCK", 1 ) ;
if( DB::isError( $values ) ) die( $value->toString() ) ;
foreach( $values as $value ) {
printf( "%s¥n", $value ) ;
}
$params = array( 110, 140 ) ;
$values = $db->getCol( "SELECT * FROM STOCKS.STOCK WHERE PRODUCT_NUMBER BETWEEN ! AND !",
"PRODUCT_NAME", $params ) ;
if( DB::isError( $values ) ) die( $value->toString() ) ;
foreach( $values as $value ) {
printf( "%s¥n", $value ) ;
}
$db->disconnect() ;
?>
</PRE>
</BODY>
</HTML>
5.3.16 getAssoc
説明
getAssocは、prepare、execute、fetchRow、freeを呼び出し、すべての行の値を一列目の列名で対応付けた連想配列を返却します。
構文
mixed getAssoc( string statement [, boolean force [, array params ] ] ) ;
- 72 -
パラメタ
statement :
動的SELECT文を指定してください。
paramsで指定する配列の値をシングルクォーテーション(')で囲んだ定数値にしてSQL文を組み立てる場合、SQL文の値指定に動的
パラメタと同様に“?”を指定してください。
paramsで指定する配列の値をそのままの形の定数にしてSQL文を組み立てる場合、SQL文の値指定に動的パラメタの代わりに“!”を指定してください。
paramsで指定する配列の値を存在するファイル名として扱い、ファイルから読み込んだ値を定数値にしてSQL文を組み立てる場合、SQL文の値指定に動的パラメタの代わりに“&”を指定してください。
“?”、“!”、“&”は、動的パラメタで実現しているわけではなく、prepare、executeの処理でSQL文の組み立て直しを行っていることに注意
してください。
force :
選択リストの列が2つのとき、連想配列の値に配列を設定する場合、TRUEを指定してください。
選択リストの列が2つのとき、連想配列の値に選択リストの2つ目の値を設定する場合、FALSEを指定してください。
params :
SQL文中の“?”、“!”、“&”に対応する値の配列の配列を指定してください。
戻り値
連想配列が返却されます。
行がない場合、要素数が0個の配列が返却されます。
選択リストの列が2個未満の場合、DB_ERROR_TRUNCATEが返却されます。
値がない場合、NULLが返却されます。
異常の場合、DB_Errorオブジェクトが返却されます。
例
<HTML>
<BODY>
<PRE>
<?php
require_once( "DB.php" ) ;
$db = DB::connect( "symfoware://rdbmng:******@RDBDB" ) ;
if( DB::isError( $db ) ) die( $db->toString() ) ;
$db->query( "DROP TABLE STOCKS.STOCK CASCADE" ) ;
$result = $db->query( "CREATE TABLE STOCKS.STOCK ( PRODUCT_NUMBER INTEGER NOT NULL, PRODUCT_NAME
CHAR(20) NOT NULL, STOCK_QUANTITY INTEGER, WAREHOUSE_NUMBER SMALLINT NOT NULL ) ON DBSP1" ) ;
if( DB::isError( $result ) ) die( $result->toString() ) ;
$result = $db->query( "INSERT INTO STOCKS.STOCK VALUES( 140, 'cassette deck', 120, 2 )" ) ;
if( DB::isError( $result ) ) die( $result->toString() ) ;
$result = $db->query( "INSERT INTO STOCKS.STOCK VALUES( 110, 'television', 85, 2 )" ) ;
if( DB::isError( $result ) ) die( $result->toString() ) ;
$result = $db->query( "INSERT INTO STOCKS.STOCK VALUES( 999, 'unknown', 999, 999 )" ) ;
if( DB::isError( $result ) ) die( $result->toString() ) ;
$values = $db->getAssoc( "SELECT TRIM(PRODUCT_NAME), PRODUCT_NUMBER, STOCK_QUANTITY, WAREHOUSE_NUMBER
FROM STOCKS.STOCK" ) ;
if( DB::isError( $value ) ) die( $value->toString() ) ;
foreach( $values["cassette deck"] as $value ) {
printf( "%s¥n", $value ) ;
}
foreach( $values["television"] as $value ) {
printf( "%s¥n", $value ) ;
}
- 73 -
foreach( $values["unknown"] as $value ) {
printf( "%s¥n", $value ) ;
}
$params = array( 110, 140 ) ;
$values = $db->getAssoc( "SELECT TRIM(PRODUCT_NAME), PRODUCT_NUMBER FROM STOCKS.STOCK WHERE
PRODUCT_NUMBER BETWEEN ! AND !", TRUE, $params ) ;
if( DB::isError( $values ) ) die( $value->toString() ) ;
foreach( $values["cassette deck"] as $value ) {
printf( "%s¥n", $value ) ;
}
foreach( $values["television"] as $value ) {
printf( "%s¥n", $value ) ;
}
$params = array( 140, 999 ) ;
$values = $db->getAssoc( "SELECT TRIM(PRODUCT_NAME), PRODUCT_NUMBER FROM STOCKS.STOCK WHERE
PRODUCT_NUMBER BETWEEN ! AND !", FALSE, $params ) ;
if( DB::isError( $values ) ) die( $value->toString() ) ;
printf( "%s¥n", $values["cassette deck"] ) ;
printf( "%s¥n", $values["unknown"] ) ;
$db->disconnect() ;
?>
</PRE>
</BODY>
</HTML>
5.3.17 getAll
説明
getAllは、prepare、execute、fetchRow、freeを呼び出し、すべての行の値の配列を返却します。
構文
mixed getAll( string statement [, array params [, int fetch_mode ] ] ) ;
パラメタ
statement :
動的SELECT文を指定してください。
paramsで指定する配列の値をシングルクォーテーション(')で囲んだ定数値にしてSQL文を組み立てる場合、SQL文の値指定に動的
パラメタと同様に“?”を指定してください。
paramsで指定する配列の値をそのままの形の定数にしてSQL文を組み立てる場合、SQL文の値指定に動的パラメタの代わりに“!”を指定してください。
paramsで指定する配列の値を存在するファイル名として扱い、ファイルから読み込んだ値を定数値にしてSQL文を組み立てる場合、SQL文の値指定に動的パラメタの代わりに“&”を指定してください。
“?”、“!”、“&”は、動的パラメタで実現しているわけではなく、prepare、executeの処理でSQL文の組み立て直しを行っていることに注意
してください。
params :
動的パラメタに対応する値の配列を指定してください。
fetch_mode :
フェッチした行の値を、配列の配列で獲得する場合、DB_FETCHMODE_ORDEREDを指定してください。
フェッチした行の値を、連想配列の配列で獲得する場合、DB_FETCHMODE_ASSOCを指定してください。
フェッチした行の値を、DB_Rowオブジェクトの配列で獲得する場合、DB_FETCHMODE_OBJECTを指定してください。
フェッチした行の値を、配列の連想配列で獲得する場合、DB_FETCHMODE_ASSOCとDB_FETCMODE_FLIPPEDのビット和を指定
してください。
- 74 -
戻り値
連想配列の配列、オブジェクトの配列または配列の連想配列が返却されます。
行がない場合、要素数が0個の配列が返却されます。
異常の場合、DB_Errorオブジェクトが返却されます。
例
<HTML>
<BODY>
<PRE>
<?php
require_once( "DB.php" ) ;
$db = DB::connect( "symfoware://rdbmng:******@RDBDB" ) ;
if( DB::isError( $db ) ) die( $db->toString() ) ;
$db->query( "DROP TABLE STOCKS.STOCK CASCADE" ) ;
$result = $db->query( "CREATE TABLE STOCKS.STOCK ( PRODUCT_NUMBER INTEGER NOT NULL, PRODUCT_NAME
CHAR(20) NOT NULL, STOCK_QUANTITY INTEGER, WAREHOUSE_NUMBER SMALLINT NOT NULL ) ON DBSP1" ) ;
if( DB::isError( $result ) ) die( $result->toString() ) ;
$result = $db->query( "INSERT INTO STOCKS.STOCK VALUES( 140, 'cassette deck', 120, 2 )" ) ;
if( DB::isError( $result ) ) die( $result->toString() ) ;
$result = $db->query( "INSERT INTO STOCKS.STOCK VALUES( 110, 'television', 85, 2 )" ) ;
if( DB::isError( $result ) ) die( $result->toString() ) ;
$result = $db->query( "INSERT INTO STOCKS.STOCK VALUES( 999, 'unknown', 999, 999 )" ) ;
if( DB::isError( $result ) ) die( $result->toString() ) ;
$values = $db->getAll( "SELECT * FROM STOCKS.STOCK ORDER BY PRODUCT_NUMBER" ) ;
if( DB::isError( $values ) ) {
die( $values->toString() ) ;
}
foreach( $values as $value ) {
printf( "%d¥n", $value[0] ) ;
printf( "%s¥n", $value[1] ) ;
printf( "%d¥n", $value[2] ) ;
printf( "%d¥n", $value[3] ) ;
}
$params = array() ;
$values = $db->getAll( "SELECT * FROM STOCKS.STOCK", $params, DB_FETCHMODE_ASSOC ) ;
if( DB::isError( $value ) ) {
die( $values->toString() ) ;
}
foreach( $values as $value ) {
printf( "%d¥n", $value["PRODUCT_NUMBER"] ) ;
printf( "%s¥n", $value["PRODUCT_NAME"] ) ;
printf( "%d¥n", $value["STOCK_QUANTITY"] ) ;
printf( "%d¥n", $value["WAREHOUSE_NUMBER"] ) ;
}
$params = array() ;
$values = $db->getAll( "SELECT * FROM STOCKS.STOCK", $params, DB_FETCHMODE_ASSOC |
DB_FETCHMODE_FLIPPED ) ;
if( DB::isError( $values ) ) die( $values->toString() ) ;
foreach( $values as $key => $value ) {
printf( "%s¥n", $key ) ;
foreach( $value as $val ) {
printf( "%s¥n", $val ) ;
}
}
$params = array( 110, 140 ) ;
$db_rows = $db->getAll( "SELECT * FROM STOCKS.STOCK WHERE PRODUCT_NUMBER BETWEEN ! AND !", $params,
DB_FETCHMODE_OBJECT ) ;
if( DB::isError( $db_rows ) ) {
die( $db_rows->toString() ) ;
- 75 -
}
foreach( $db_rows as $db_row ) {
printf( "%d¥n", $db_row->PRODUCT_NUMBER ) ;
printf( "%s¥n", $db_row->PRODUCT_NAME ) ;
printf( "%d¥n", $db_row->STOCK_QUANTITY ) ;
printf( "%d¥n", $db_row->WAREHOUSE_NUMBER ) ;
}
$db->disconnect() ;
?>
</PRE>
</BODY>
</HTML>
5.3.18 affectedRows
説明
affected Rowsは、結果の行数を返却します。
構文
mixed affectedRows( void ) ;
戻り値
SQL文が動的SELECT文の場合、0が返却されます。
SQL文がINSERT文、UPDATE文:探索、UPDATE文:位置付け、DELETE文:探索、DELETE文:位置付けの場合、更新件数が返却
されます。
SQL文がINSERT文、UPDATE文:探索、DELETE文:探索以外の場合、0が返却されます。
異常の場合、DB_Errorオブジェクトが返却されます。
例
<HTML>
<BODY>
<PRE>
<?php
require_once( "DB.php" ) ;
$db = DB::connect( "symfoware://rdbmng:******@RDBDB" ) ;
if( DB::isError( $db ) ) die( $db->toString() ) ;
$db->query( "DROP TABLE STOCKS.STOCK CASCADE" ) ;
$result = $db->query( "CREATE TABLE STOCKS.STOCK ( PRODUCT_NUMBER INTEGER NOT NULL, PRODUCT_NAME
CHAR(20) NOT NULL, STOCK_QUANTITY INTEGER, WAREHOUSE_NUMBER SMALLINT NOT NULL ) ON DBSP1" ) ;
if( DB::isError( $result ) ) die( $result->toString() ) ;
$affectedRows = $db->affectedRows() ;
if( DB::isError( $affectedRows ) ) {
printf( "%s¥n", $affectedRows->toString() ) ;
}
printf( "affectedRows : %s¥n", $affectedRows ) ;
$result = $db->query( "INSERT INTO STOCKS.STOCK VALUES( 140, 'cassette deck', 120, 2 )" ) ;
if( DB::isError( $result ) ) die( $result->toString() ) ;
$affectedRows = $db->affectedRows() ;
if( DB::isError( $affectedRows ) ) {
printf( "%s¥n", $affectedRows->toString() ) ;
}
printf( "affectedRows : %s¥n", $affectedRows ) ;
$result = $db->query( "INSERT INTO STOCKS.STOCK VALUES( 110, 'television', 85, 2 )" ) ;
if( DB::isError( $result ) ) die( $result->toString() ) ;
$affectedRows = $db->affectedRows() ;
if( DB::isError( $affectedRows ) ) {
- 76 -
printf( "%s¥n", $affectedRows->toString() ) ;
}
printf( "affectedRows : %s¥n", $affectedRows ) ;
$result = $db->query( "SELECT * FROM STOCKS.STOCK" ) ;
if( DB::isError( $result ) ) die( $result->toString() ) ;
$affectedRows = $db->affectedRows() ;
if( DB::isError( $affectedRows ) ) {
printf( "%s¥n", $affectedRows->toString() ) ;
}
printf( "affectedRows : %s¥n", $affectedRows ) ;
while( $values = $result->fetchRow() ) {
for( $x = 0 ; $x < $result->numCols() ; $x ++ ) {
if( $x != 0 ) printf( " " ) ;
printf( "%s", $values[ $x ] ) ;
}
printf( "¥n" ) ;
}
$db->disconnect() ;
?>
</PRE>
</BODY>
</HTML>
5.3.19 nextId
説明
nextIdは未サポートです。
nextIdを使用したときの動作は不定です。
5.3.20 createSequence
説明
createSequenceは未サポートです。
createSequenceを使用したときの動作は不定です。
5.3.21 dropSequence
説明
dropSequenceは未サポートです。
dropSequenceを使用したときの動作は不定です。
5.3.22 tableInfo
説明
tableInfoは未サポートです。
tableInfoを使用したときの動作は不定です。
5.3.23 getListOf
説明
getListOfは未サポートです。
getListOfを使用したときの動作は不定です。
- 77 -
5.3.24 autoCommit
説明
autoCommitは、自動的にコミットとするか否かを設定し、復帰値を返却します。
構文
mixed autoCommit( bool void ) ;
戻り値
DB_OKを返却します。
異常の場合、DB_Errorオブジェクトを返却します。
例
<HTML>
<BODY>
<PRE>
<?php
require_once( "DB.php" ) ;
$db = DB::connect( "symfoware://rdbmng:******@RDBDB" ) ;
if( DB::isError( $db ) ) die( $db->toString() ) ;
$db->query( "DROP TABLE STOCKS.STOCK CASCADE" ) ;
$result = $db->query( "CREATE TABLE STOCKS.STOCK ( PRODUCT_NUMBER INTEGER NOT NULL, PRODUCT_NAME
CHAR(20) NOT NULL, STOCK_QUANTITY INTEGER, WAREHOUSE_NUMBER SMALLINT NOT NULL ) ON DBSP1" ) ;
if( DB::isError( $result ) ) die( $result->toString() ) ;
$result = $db->autoCommit( FALSE ) ;
$result = $db->query( "INSERT INTO STOCKS.STOCK VALUES( 140, 'cassette deck', 120, 2 )" ) ;
if( DB::isError( $result ) ) die( $result->toString() ) ;
$result = $db->commit() ;
if( DB::isError( $result ) ) die( $result->toString() ) ;
$result = $db->query( "INSERT INTO STOCKS.STOCK VALUES( 110, 'television', 85, 2 )" ) ;
if( DB::isError( $result ) ) die( $result->toString() ) ;
$result = $db->rollback() ;
if( DB::isError( $result ) ) die( $result->toString() ) ;
$result = $db->autoCommit( TRUE ) ;
if( DB::isError( $result ) ) die( $result->toString() ) ;
$result = $db->query( "SELECT * FROM STOCKS.STOCK" ) ;
if( DB::isError( $result ) ) die( $result->toString() ) ;
while( $values = $result->fetchRow() ) {
for( $x = 0 ; $x < $result->numCols() ; $x ++ ) {
if( $x != 0 ) printf( " " ) ;
printf( "%s", $values[ $x ] ) ;
}
printf( "¥n" ) ;
}
$db->disconnect() ;
?>
</PRE>
</BODY>
</HTML>
5.3.25 commit
説明
commitは、データベースをコミットし、復帰値を返却します。
- 78 -
構文
mixed commit( void ) ;
戻り値
DB_OKを返却します。
異常の場合、DB_Errorオブジェクトを返却します。
例
“5.3.24 autoCommit”の“例”を参照してください。
5.3.26 rollback
説明
rollbackは、データベースをロールバックし、復帰値を返却します。
構文
mixed rollback( void ) ;
戻り値
DB_OKを返却します。
異常の場合、DB_Errorオブジェクトを返却します。
例
“5.3.24 autoCommit”の“例”を参照してください。
5.3.27 errorNative
説明
errorNativeは、SQLSTATEとSQLMSGからなるエラー文字列を返却します。
SQLSTATEはデータベースアクセスの状態を5バイトの文字列で表します。SQLSTATEの詳細は、“SQLリファレンスガイド”
の“SQLSTATE”を参照してください。
SQLMSGは、データベースアクセスのエラーメッセージの文字列です。SQLMSGの詳細は、“まえがき”の“Symfoware/RDBが出力す
るメッセージの処置を参照する”を参照してください。
構文
string errorNative( void ) ;
戻り値
エラー文字列を返却します。
例
<HTML>
<BODY>
<PRE>
<?php
require_once( "DB.php" ) ;
$db = DB::connect( "symfoware://rdbmng:******@RDBDB" ) ;
if( DB::isError( $db ) ) die( $db->toString() ) ;
$db->query( "DROP TABLE STOCKS.STOCK CASCADE" ) ;
- 79 -
$result = $db->query( "CREATE TABLE STOCKS.STOCK ( PRODUCT_NUMBER INTEGER NOT NULL, PRODUCT_NAME
CHAR(20) NOT NULL, STOCK_QUANTITY INTEGER, WAREHOUSE_NUMBER SMALLINT NOT NULL ) ON DBSP1" ) ;
if( DB::isError( $result ) ) die( $result->toString() ) ;
$result = $db->query( "INSERT INTO STOCKS.STOCK VALUES( 140, 'cassette deck', 120, 2 )" ) ;
if( DB::isError( $result ) ) die( $result->toString() ) ;
$result = $db->query( "INSERT INTO STOCKS.STOCK VALUES( 110, 'television', 85, 2 )" ) ;
if( DB::isError( $result ) ) die( $result->toString() ) ;
$result = $db->query( "INSERT -- ILLEGAL" ) ;
if( DB::isError( $result ) ) {
printf( "%s¥n", $result->toString() ) ;
printf( "%s¥n", $db->ErrorNative() ) ;
}
$result = $db->query( "SELECT * FROM STOCKS.STOCK" ) ;
if( DB::isError( $result ) ) die( $result->toString() ) ;
while( $values = $result->fetchRow() ) {
for( $x = 0 ; $x < $result->numCols() ; $x ++ ) {
if( $x != 0 ) printf( " " ) ;
printf( "%s", $values[ $x ] ) ;
}
printf( "¥n" ) ;
}
$result = $db->query( "SELECT 300 / ( PRODUCT_NUMBER - 110 ) FROM STOCKS.STOCK" ) ;
if( DB::isError( $result ) ) die( $result->toString() ) ;
while( $values = $result->fetchRow() ) {
for( $x = 0 ; $x < $result->numCols() ; $x ++ ) {
if( $x != 0 ) printf( " " ) ;
printf( "%s", $values[ $x ] ) ;
}
printf( "¥n" ) ;
}
// zero divide
if( DB::isError( $result ) ) {
printf( "%s¥n", $result->toString() ) ;
printf( "%s¥n", $db->ErrorNative() ) ;
}
$result = $db->query( "DELETE FROM STOCKS.STOCK" ) ;
// normal
if( DB::isError( $result ) ) {
printf( "%s¥n", $result->toString() ) ;
printf( "%s¥n", $db->ErrorNative() ) ;
}
$result = $db->query( "DELETE FROM STOCKS.STOCK" ) ;
// no record
if( DB::isError( $result ) ) {
printf( "%s¥n", $result->toString() ) ;
printf( "%s¥n", $db->ErrorNative() ) ;
}
$db->disconnect() ;
?>
</PRE>
</BODY>
</HTML>
5.4 DB_Resultクラス
DB_Resultクラスについて説明します。
5.4.1 fetchRow
- 80 -
説明
fetchRowは、次の行または指定した行をフェッチし、配列を返却します。
構文
mixed fetchRow( [ int fetch_mode [, int row_number ] ] ) ;
パラメタ
fetch_mode :
フェッチした行の値を配列で獲得する場合、DB_FETCHMODE_ORDEREDを指定してください。
フェッチした行の値を列名で対応付けた連想配列で獲得する場合、DB_FETCHMODE_ASSOCを指定してください。
フェッチした行の値をDB_Rowオブジェクトで獲得する場合、DB_FETCHMODE_OBJECTを指定してください。
row_number :
1以上の数値で行番号を指定してください。
次の行をフェッチする場合、省略してください。
戻り値
配列、連想配列、または、オブジェクトが返却されます。
行がない場合、NULLが返却されます。
異常の場合、DB_Errorオブジェクトが返却されます。
例
<HTML>
<BODY>
<PRE>
<?php
require_once( "DB.php" ) ;
$db = DB::connect( "symfoware://rdbmng:******@RDBDB" ) ;
if( DB::isError( $db ) ) die( $db->toString() ) ;
$db->query( "DROP TABLE STOCKS.STOCK CASCADE" ) ;
$result = $db->query( "CREATE TABLE STOCKS.STOCK ( PRODUCT_NUMBER INTEGER NOT NULL, PRODUCT_NAME
CHAR(20) NOT NULL, STOCK_QUANTITY INTEGER, WAREHOUSE_NUMBER SMALLINT NOT NULL ) ON DBSP1" ) ;
if( DB::isError( $result ) ) die( $result->toString() ) ;
$result = $db->query( "INSERT INTO STOCKS.STOCK VALUES( 140, 'cassette deck', 120, 2 )" ) ;
if( DB::isError( $result ) ) die( $result->toString() ) ;
$result = $db->query( "INSERT INTO STOCKS.STOCK VALUES( 110, 'television', 85, 2 )" ) ;
if( DB::isError( $result ) ) die( $result->toString() ) ;
$result = $db->query( "SELECT * FROM STOCKS.STOCK" ) ;
if( DB::isError( $result ) ) die( $result->toString() ) ;
for( ; ; ) {
$values = $result->fetchRow() ;
if( DB::isError( $values ) ) {
die( $values->toString() ) ;
}
if( is_null( $values ) ) {
break ;
}
printf( "%d¥n", $values[ 0 ] ) ;
printf( "%s¥n", $values[ 1 ] ) ;
printf( "%d¥n", $values[ 2 ] ) ;
printf( "%d¥n", $values[ 3 ] ) ;
}
$result = $db->query( "SELECT * FROM STOCKS.STOCK" ) ;
if( DB::isError( $result ) ) die( $result->toString() ) ;
for( ; ; ) {
- 81 -
$values = $result->fetchRow( DB_FETCHMODE_ASSOC ) ;
if( DB::isError( $values ) ) {
die( $values->toString() ) ;
}
if( is_null( $values ) ) {
break ;
}
printf( "%d¥n", $values["PRODUCT_NUMBER"] ) ;
printf( "%s¥n", $values["PRODUCT_NAME"] ) ;
printf( "%d¥n", $values["STOCK_QUANTITY"] ) ;
printf( "%d¥n", $values["WAREHOUSE_NUMBER"] ) ;
}
$result = $db->query( "SELECT * FROM STOCKS.STOCK ORDER BY PRODUCT_NUMBER" ) ;
if( DB::isError( $result ) ) die( $result->toString() ) ;
for( $y = 1 ; $y >= 0 ; $y -- ) {
$db_row = $result->fetchRow( DB_FETCHMODE_OBJECT, $y ) ;
if( DB::isError( $db_row ) ) {
die( $db_row->toString() ) ;
}
printf( "%d¥n", $db_row->PRODUCT_NUMBER ) ;
printf( "%s¥n", $db_row->PRODUCT_NAME ) ;
printf( "%d¥n", $db_row->STOCK_QUANTITY ) ;
printf( "%d¥n", $db_row->WAREHOUSE_NUMBER ) ;
}
$db->disconnect() ;
?>
</PRE>
</BODY>
</HTML>
5.4.2 fetchInto
説明
fetchIntoは、次の行または指定した行をフェッチし、配列を返却します。
構文
mixed fetchInto( mixed &value [, int fetch_mode [, int row_number ] ] ) ;
パラメタ
value :
値を受け取る変数を指定してください。
fetch_mode :
フェッチした行の値を配列で獲得する場合、DB_FETCHMODE_ORDEREDを指定してください。
フェッチした行の値を列名で対応付けた連想配列で獲得する場合、DB_FETCHMODE_ASSOCを指定してください。
フェッチした行の値をDB_Rowオブジェクトで獲得する場合、DB_FETCHMODE_OBJECTを指定してください。
row_number :
1以上の数値で行番号を指定してください。
次の行をフェッチする場合、省略してください。
戻り値
配列が返却されます。
異常の場合、DB_Errorオブジェクトが返却されます。
- 82 -
例
<HTML>
<BODY>
<PRE>
<?php
require_once( "DB.php" ) ;
$db = DB::connect( "symfoware://rdbmng:******@RDBDB" ) ;
if( DB::isError( $db ) ) die( $db->toString() ) ;
$db->query( "DROP TABLE STOCKS.STOCK CASCADE" ) ;
$result = $db->query( "CREATE TABLE STOCKS.STOCK ( PRODUCT_NUMBER INTEGER NOT NULL, PRODUCT_NAME
CHAR(20) NOT NULL, STOCK_QUANTITY INTEGER, WAREHOUSE_NUMBER SMALLINT NOT NULL ) ON DBSP1" ) ;
if( DB::isError( $result ) ) die( $result->toString() ) ;
$result = $db->query( "INSERT INTO STOCKS.STOCK VALUES( 140, 'cassette deck', 120, 2 )" ) ;
if( DB::isError( $result ) ) die( $result->toString() ) ;
$result = $db->query( "INSERT INTO STOCKS.STOCK VALUES( 110, 'television', 85, 2 )" ) ;
if( DB::isError( $result ) ) die( $result->toString() ) ;
$result = $db->query( "SELECT * FROM STOCKS.STOCK" ) ;
if( DB::isError( $result ) ) die( $result->toString() ) ;
for( ; ; ) {
$rc = $result->fetchInto( $values ) ;
if( DB::isError( $rc ) ) {
die( $rc->toString() ) ;
}
if( ! $rc ) {
break ;
}
printf( "%d¥n", $values[ 0 ] ) ;
printf( "%s¥n", $values[ 1 ] ) ;
printf( "%d¥n", $values[ 2 ] ) ;
printf( "%d¥n", $values[ 3 ] ) ;
}
$result = $db->query( "SELECT * FROM STOCKS.STOCK" ) ;
if( DB::isError( $result ) ) die( $result->toString() ) ;
for( ; ; ) {
$rc = $result->fetchInto( $values, DB_FETCHMODE_ASSOC ) ;
if( DB::isError( $rc ) ) {
die( $rc->toString() ) ;
}
if( ! $rc ) {
break ;
}
printf( "%d¥n", $values["PRODUCT_NUMBER"] ) ;
printf( "%s¥n", $values["PRODUCT_NAME"] ) ;
printf( "%d¥n", $values["STOCK_QUANTITY"] ) ;
printf( "%d¥n", $values["WAREHOUSE_NUMBER"] ) ;
}
$result = $db->query( "SELECT * FROM STOCKS.STOCK ORDER BY PRODUCT_NUMBER" ) ;
if( DB::isError( $result ) ) die( $result->toString() ) ;
for( $y = 1 ; $y >= 0 ; $y -- ) {
$rc = $result->fetchInto( $db_row, DB_FETCHMODE_OBJECT, $y ) ;
if( DB::isError( $rc ) ) {
die( $rc->toString() ) ;
}
printf( "%d¥n", $db_row->PRODUCT_NUMBER ) ;
printf( "%s¥n", $db_row->PRODUCT_NAME ) ;
printf( "%d¥n", $db_row->STOCK_QUANTITY ) ;
printf( "%d¥n", $db_row->WAREHOUSE_NUMBER ) ;
}
$db->disconnect() ;
?>
</PRE>
- 83 -
</BODY>
</HTML>
5.4.3 numCols
説明
numColsは、結果の列数を返却します。
構文
int numCols( void ) ;
戻り値
列数が返却されます。
異常の場合、DB_Errorオブジェクトが返却されます。
例
<HTML>
<BODY>
<PRE>
<?php
require_once( "DB.php" ) ;
$db = DB::connect( "symfoware://rdbmng:******@RDBDB" ) ;
if( DB::isError( $db ) ) die( $db->toString() ) ;
$db->query( "DROP TABLE STOCKS.STOCK CASCADE" ) ;
$result = $db->query( "CREATE TABLE STOCKS.STOCK ( PRODUCT_NUMBER INTEGER NOT NULL, PRODUCT_NAME
CHAR(20) NOT NULL, STOCK_QUANTITY INTEGER, WAREHOUSE_NUMBER SMALLINT NOT NULL ) ON DBSP1" ) ;
if( DB::isError( $result ) ) die( $result->toString() ) ;
$result = $db->query( "INSERT INTO STOCKS.STOCK VALUES( 140, 'cassette deck', 120, 2 )" ) ;
if( DB::isError( $result ) ) die( $result->toString() ) ;
$result = $db->query( "INSERT INTO STOCKS.STOCK VALUES( 110, 'television', 85, 2 )" ) ;
if( DB::isError( $result ) ) die( $result->toString() ) ;
$result = $db->query( "SELECT * FROM STOCKS.STOCK" ) ;
if( DB::isError( $result ) ) die( $result->toString() ) ;
printf( "numCols : %d¥n", $result->numCols() ) ;
while( $values = $result->fetchRow() ) {
for( $x = 0 ; $x < $result->numCols() ; $x ++ ) {
if( $x != 0 ) printf( " " ) ;
printf( "%s", $values[ $x ] ) ;
}
printf( "¥n" ) ;
}
$db->disconnect() ;
?>
</PRE>
</BODY>
</HTML>
5.4.4 numRows
説明
numRowsは、結果の行数を返却します。
構文
int numRows( void ) ;
- 84 -
戻り値
SQL文が動的SELECT文の場合、DB_Errorオブジェクトが返却されます。
異常の場合、DB_Errorオブジェクトが返却されます。
例
<HTML>
<BODY>
<PRE>
<?php
require_once( "DB.php" ) ;
$db = DB::connect( "symfoware://rdbmng:******@RDBDB" ) ;
if( DB::isError( $db ) ) die( $db->toString() ) ;
$db->query( "DROP TABLE STOCKS.STOCK CASCADE" ) ;
$result = $db->query( "CREATE TABLE STOCKS.STOCK ( PRODUCT_NUMBER INTEGER NOT NULL, PRODUCT_NAME
CHAR(20) NOT NULL, STOCK_QUANTITY INTEGER, WAREHOUSE_NUMBER SMALLINT NOT NULL ) ON DBSP1" ) ;
if( DB::isError( $result ) ) die( $result->toString() ) ;
$result = $db->query( "INSERT INTO STOCKS.STOCK VALUES( 140, 'cassette deck', 120, 2 )" ) ;
if( DB::isError( $result ) ) die( $result->toString() ) ;
$result = $db->query( "INSERT INTO STOCKS.STOCK VALUES( 110, 'television', 85, 2 )" ) ;
if( DB::isError( $result ) ) die( $result->toString() ) ;
$result = $db->query( "SELECT * FROM STOCKS.STOCK" ) ;
if( DB::isError( $result ) ) die( $result->toString() ) ;
$numRows = $result->numRows() ;
if( DB::isError( $numRows ) ) {
printf( "%s¥n", $numRows->toString() ) ;
}
while( $values = $result->fetchRow() ) {
for( $x = 0 ; $x < $result->numCols() ; $x ++ ) {
if( $x != 0 ) printf( " " ) ;
printf( "%s", $values[ $x ] ) ;
}
printf( "¥n" ) ;
}
$db->disconnect() ;
?>
</PRE>
</BODY>
</HTML>
5.4.5 nextResult
説明
nextResultは未サポートです。
nextResultを使用したときの動作は不定です。
5.4.6 free
説明
freeは、明示的にフェッチを終了し、復帰値を返却します。
構文
mixed free( void ) ;
戻り値
TRUEを返却します。
- 85 -
異常の場合、DB_Errorオブジェクトを返却します。
例
<HTML>
<BODY>
<PRE>
<?php
require_once( "DB.php" ) ;
$db = DB::connect( "symfoware://rdbmng:******@RDBDB" ) ;
if( DB::isError( $db ) ) die( $db->toString() ) ;
$db->query( "DROP TABLE STOCKS.STOCK CASCADE" ) ;
$result = $db->query( "CREATE TABLE STOCKS.STOCK ( PRODUCT_NUMBER INTEGER NOT NULL, PRODUCT_NAME
CHAR(20) NOT NULL, STOCK_QUANTITY INTEGER, WAREHOUSE_NUMBER SMALLINT NOT NULL ) ON DBSP1" ) ;
if( DB::isError( $result ) ) die( $result->toString() ) ;
$result = $db->query( "INSERT INTO STOCKS.STOCK VALUES( 140, 'cassette deck', 120, 2 )" ) ;
if( DB::isError( $result ) ) die( $result->toString() ) ;
$result = $db->query( "INSERT INTO STOCKS.STOCK VALUES( 110, 'television', 85, 2 )" ) ;
if( DB::isError( $result ) ) die( $result->toString() ) ;
$result = $db->query( "SELECT * FROM STOCKS.STOCK" ) ;
if( DB::isError( $result ) ) die( $result->toString() ) ;
$values = $result->fetchRow() ;
for( $x = 0 ; $x < $result->numCols() ; $x ++ ) {
if( $x != 0 ) printf( " " ) ;
printf( "%s", $values[ $x ] ) ;
}
printf( "¥n" ) ;
$result->free() ;
$values = @( $result->fetchRow() ) ; // warning
if( is_null( $values ) ) {
printf( "no record¥n" ) ;
}
$db->disconnect() ;
?>
</PRE>
</BODY>
</HTML>
5.5 DB_Errorクラス
DB_Errorクラスについて説明します。
DB_Errorクラスは、PEAR_Errorクラスを継承しており、PEAR_Errorクラスが持つメソッドを利用することができます。
PEAR_Errorクラスが持つメソッドのうち、よく使用するメソッドを挙げます。
5.5.1 getMessage
説明
getMessageは、DBクラスのエラー文字列を返却します。
getMessageで得られるエラー文字列には、データベースアクセスに関するエラー文字列は埋め込まれていませんので、toStringを使用
することを推奨します。toStringの詳細は、“5.5.2 toString”を参照してください。
構文
string getMessage( void ) ;
戻り値
DBクラスのエラー文字列を返却します。
- 86 -
5.5.2 toString
説明
toStringは、SQLMSGを含むエラー文字列を返却します。
SQLMSGは、データベースアクセスのエラーメッセージの文字列です。SQLMSGの詳細は、“まえがき”の“Symfoware/RDBが出力す
るメッセージの処置を参照する”を参照してください。
構文
string toString( void ) ;
戻り値
SQLMSGを含むエラー文字列を返却します。
例
“5.3.27 errorNative”の“例”を参照してください。
5.6 DB_Warningクラス
DB_Warningクラスについて説明します。
現状、DBクラスのメソッドでSymfoware/RDBのエラーが発生したときは、エラーコードかDB_Errorオブジェクトのみを返却し、DB_Warningオブジェクトを返却することはありません。
将来的に、DBクラスのメソッドでエラーが発生したときに、DB_Warningオブジェクトを返却することがあると考えられます
5.7 Cacheクラス
Cacheクラスについて説明します。
Cacheクラス
Cacheクラスは、出力の内容を保存しておき、必要に応じて保存しておいた出力の内容を再利用する機能です。
Cacheクラスは、ファイルまたはPEARのDBクラスを用いて、出力の内容をファイルまたはデータベースに保存します。
しかし、Cacheクラスのデータベースアクセス処理において、特定のデータベースに特価した処理を行っているため、出力の内容を
Symfoware/RDBのデータベースに保存することはできません。
- 87 -
第6章 PHPlib for Symfowareの仕様
本章では、PHPlib for Symfowareを用いてSymfoware/RDBのデータベースをアクセスするときの仕様について説明します。
6.1 PHPlib for Symfowareの概要
6.2 PHPlibの使用例
6.1 PHPlib for Symfowareの概要
PHPlib for Symfowareの概要について説明します。
6.1.1 PHPlibの特徴
PHPlibの特徴について説明します。
PHPlibの特徴
PHPlibは、PHP 3の時点で有志によって開発されたクラスライブラリです。PHP 3やPHP 4には同梱されていません。
PHPlibは、データベースアクセス機能、セション機能、認証機能、パーミッション管理機能およびユーザ変数機能の処理がクラス化さ
れています。データベースアクセス自体はセション機能、認証機能、パーミッション管理機能およびユーザ変数機能のクラスの情報の
格納として使用されるものであり、複数データベースベンダのデータベースアクセスを1つのインターフェースに集約(データベースア
クセスの抽象化)することだけを目的とはしていません。
実際に使用する場合は、これらのクラスを継承して新規のクラスを作成し、新規のクラスで処理の一部分を乗せ換えます。PHPスクリプ
トでは、新規のクラスを使用します。
よって、PHPlibで提供されているクラスは、セション機能、認証機能、パーミッション管理機能およびユーザ変数機能のサンプルのよう
なものであるといえます。
PHP 4の新機能
PHP 4ではセションなどがサポートされています。
また、PHP 4にはPEARと呼ばれるライブラリが同梱されていて、データベースアクセスの処理がクラス化されています。
今後は、PHP 4が持つセション機能や、PEARが持つデータベースアクセスの機能が主流となると考えられます。
PHPlibの選択
既存のPHPスクリプトがPHPlibを用いていて、そのまま既存のPHPスクリプトを流用する場合には、PHPlibを使用してください。
新規にPHPスクリプトを作成する場合、PHPlibを使用するべきか否かを充分に検討してください。
6.1.2 PHPlibで使用するファイル
PHPlibで使用するファイルについて説明します。
PHPlibローカル定義ファイル
PHPlibローカル定義ファイルは、PHPlibの各クラスを継承して新規のクラスを作成します。
Linuxの場合、/usr/local/lib/php/phplib配下にlocal.incがあります。
local.incを修正し、各機能のクラスを継承します
【修正前】
class DB_Example extends DB_Sql {
var $Host = "localhost";
var $Database = "example_database";
var $User = "example_user";
var $Password = "";
}
- 88 -
・・・
class Example_CT_Sql extends CT_Sql {
var $database_class = "DB_Example";
var $database_table = "active_sessions";
}
・・・
#class Example_CT_Split_Sql extends CT_Split_Sql {
# var $database_class = "DB_Example";
# var $database_table = "active_sessions_split";
# var $split_length = 4096;
#}
・・・
class Example_Auth extends Auth {
var $classname = "Example_Auth";
var $lifetime = 15;
var $database_class = "DB_Example";
var $database_table = "auth_user";
・・・
}
・・・
class Example_Challenge_Crypt_Auth extends Auth {
var $classname = "Example_Challenge_Crypt_Auth";
var $lifetime = 1;
var $magic = "Frobozzica";
var $database_class = "DB_Example";
var $database_table = "auth_user_md5";
・・・
}
・・・
class Example_Challenge_Auth extends Auth {
var $classname = "Example_Challenge_Auth";
var $lifetime = 1;
var $magic = "Simsalabim";
var $database_class = "DB_Example";
var $database_table = "auth_user";
・・・
}
【修正後】
class DB_Example extends DB_Sql {
var $Host = "";
var $Database = "データソース名";
var $User = "認可識別子";
var $Password = "パスワード";
}
・・・
class Example_CT_Sql extends CT_Sql {
var $database_class = "DB_Example";
var $database_table = "スキーマ名.active_sessions";
}
・・・
#class Example_CT_Split_Sql extends CT_Split_Sql {
# var $database_class = "DB_Example";
# var $database_table = "スキーマ名.active_sessions_split";
# var $split_length = 4096;
#}
・・・
class Example_Auth extends Auth {
var $classname = "Example_Auth";
var $lifetime = 15;
var $database_class = "DB_Example";
var $database_table = "スキーマ名.auth_user";
・・・
- 89 -
}
・・・
class Example_Challenge_Auth extends Auth {
var $classname = "Example_Challenge_Auth";
var $lifetime = 1;
var $magic = "Simsalabim";
var $database_class = "DB_Example";
var $database_table = "スキーマ名.auth_user";
}
・・・
class Example_Challenge_Crypt_Auth extends Auth {
var $classname = "Example_Challenge_Crypt_Auth";
var $lifetime = 1;
var $magic = "Frobozzica";
var $database_class = "DB_Example";
var $database_table = "スキーマ名.auth_user_md5";
・・・
}
データソース名、認可識別子およびパスワードは、DB_Sqlクラスでsymfoware_pconnectの呼び出しに使用されます。データソース名、
認可識別子、パスワード、symfoware_pconnectの詳細は、“4.2.33 symfoware_pconnect”を参照してください。
表“スキーマ名.active_sessions”、“スキーマ名.active_sessions_split”、“スキーマ名.auth_user”、“スキーマ名.auth_user_md5”、は、“2.1.7 PHPのインストール”で作成した表であり、セション機能、認証機能、パーミッション管理機能およびユーザ変数機能の各ク
ラスで使用されます。
PHPlib読み込みPHPスクリプトファイル
PHPlib読み込みPHPスクリプトファイルは、PHPlibの各クラスの定義ファイルをまとめて読み込みます。
Linuxの場合、/usr/local/lib/php/phplib配下にprepend.phpがあります。
prepend.phpを修正し、db_symfoware.incの読み込み指定を記述します。
【修正前】
require($_PHPLIB["libdir"] . "db_mysql.inc");
【修正後】
require($_PHPLIB["libdir"] . "db_symfoware.inc");
6.2 PHPlibの使用例
PHPlibの使用例について説明します。
6.2.1 セション機能の使用例
セション機能の使用例について説明します。
セション機能の使用例
セション機能の使用例を以下に示します。
<?php
require_once( "prepend.php" ) ;
page_open( array( "sess" => "Example_Session" )) ;
$sess->register( "count" ) ;
$count ++ ;
?>
<HTML><BODY><PRE>
<?php
printf( "count : %d¥n", $count ) ;
?>
</PRE></BODY></HTML>
<?php
- 90 -
page_close() ;
?>
6.2.2 認証機能の使用例
認証機能の使用例について説明します。
ログイン認証機能の使用例
ログイン認証機能の使用例を以下に示します。
ログイン画面を表示し、ログインする
<?php
require_once( "prepend.php" ) ;
page_open( array( "sess" => "Example_Session", "auth" => "Example_Auth" ) ) ;
?>
<HTML><BODY><PRE>
<?php
printf( "user : %s¥n", $auth->auth[ "uname" ] ) ;
printf( "id : %s¥n", $auth->auth[ "uid" ] ) ;
printf( "perm : %s¥n", $auth->auth[ "perm" ] ) ;
printf( "expire : %s¥n", date( "Y/m/d H:i:s", $auth->auth[ "exp" ] ) ) ;
?>
</PRE></BODY></HTML>
<?php
page_close() ;
?>
ログイン済みかを判定する
<?php
require_once( "prepend.php" ) ;
page_open( array( "sess" => "Example_Session", "auth" => "Example_Auth" ) ) ;
$id = $auth->is_authenticated() ;
?>
<HTML><BODY><PRE>
<?php
if( $id ) {
printf( "you are authorized¥n" ) ;
}
else {
printf( "you are not authorized¥n" ) ;
}
?>
</PRE></BODY></HTML>
<?php
page_close() ;
?>
ログアウトする
<?php
require_once( "prepend.php" ) ;
page_open( array( "sess" => "Example_Session", "auth" => "Example_Auth" ) ) ;
$auth->logout() ;
?>
<HTML><BODY><PRE>
<?php
printf( "logout¥n" ) ;
?>
</PRE></BODY></HTML>
<?php
- 91 -
page_close() ;
?>
ダイジェスト認証機能の使用例
ダイジェスト認証機能の使用例を以下に示します。
<?php
require_once( "prepend.php" ) ;
page_open( array( "sess" => "Example_Session", "auth" => "Example_Challenge_Auth" ) ) ;
?>
<HTML><BODY><PRE>
<?php
printf( "username : %s¥n", $_POST[ "username" ] ) ;
printf( "password : %s¥n", $_POST[ "password" ] ) ;
printf( "response : %s¥n", $_POST[ "response" ] ) ;
?>
</PRE></BODY></HTML>
<?php
page_close() ;
?>
6.2.3 パーミッション管理機能の使用例
パーミッション管理機能の使用例について説明します。
パーミッション管理機能の使用例
パーミッション管理機能の使用例を以下に示します。
ログイン画面を表示し、adminであるかを判定する
<?php
require_once( "prepend.php" ) ;
page_open( array( "sess" => "Example_Session", "auth" => "Example_Auth", "perm" =>
"Example_Perm" ) ) ;
$perm->check( "admin" ) ;
?>
<HTML><BODY><PRE>
<?php
printf( "you are admin¥n" ) ;
?>
</PRE></BODY></HTML>
<?php
page_close() ;
?>
adminでログインしているかを判定する
<?php
require_once( "prepend.php" ) ;
page_open( array( "sess" => "Example_Session", "auth" => "Example_Auth", "perm" =>
"Example_Perm" ) ) ;
if( $perm->have_perm( "admin" ) ) {
$bPerm = TRUE ;
}
else {
$bPerm = FALSE ;
}
?>
<HTML><BODY><PRE>
<?php
if( $bPerm ) {
- 92 -
printf( "you are admin¥n" ) ;
}
else {
printf( "you are not admin¥n" ) ;
}
?>
</PRE></BODY></HTML>
<?php
page_close() ;
?>
6.2.4 ユーザ変数機能の使用例
ユーザ変数機能の使用例について説明します。
ユーザ変数機能の使用例
ユーザ変数機能の使用例を以下に示します。
<?php
require_once( "prepend.php" ) ;
page_open( array( "sess" => "Example_Session", "auth" => "Example_Auth", "user" =>
"Example_User" ) ) ;
$sess->register( "count" ) ;
$count ++ ;
$user->register( "u_count" ) ;
$u_count ++ ;
?>
<HTML><BODY><PRE>
<?php
printf( "count : %d¥n", $count ) ;
printf( "u_count : %d¥n", $u_count ) ;
?>
</PRE></BODY></HTML>
<?php
page_close() ;
?>
- 93 -
第7章 PHP Symfowareの環境設定
本章では、PHP Symfowareの環境の設定について説明します。
7.1 PHP 動作環境ファイル
7.2 パラメタの詳細
7.1 PHP動作環境ファイル
PHP動作環境ファイルについて説明します。
PHP環境php.ini
PHP環境ファイルは、PHPの各種の動作環境を指定します。
Liunxの場合、/usr/local/lib配下にphp.iniがあります。
この動作環境ファイルphp.iniに、PHP Symfowareの動作環境を設定することができます。
デフォルトでは、PHP Symfowareの動作環境は設定されていませんので、適時、PHP Symfowareの動作環境を設定してください。
PHP Symfowareの動作環境の設定形式
[Symfoware]
; コメント
パラメタ = 値
パラメタ = 値
・・・
7.2 パラメタの詳細
パラメタの詳細について説明します。
7.2.1 symfoware.default_db
説明
symfoware.default_dbは、接続でデータソース名を省略した時に代わりに指定するデータソース名を設定します。
symfoware.default_dbを省略した場合、データソース名は空文字となります。
構文
symfoware.default_db = データソース名
パラメタ
データソース名 :
データソース名を指定してください。データソース名の詳細は、“4.2.8 symfoware_connect”を参照してください。
7.2.2 symfoware.default_user
説明
symfoware.default_userは、接続で認可識別子を省略した時に代わりに指定する認可識別子を設定します。
symfoware.default_userを省略した場合、認可識別子は空文字となります。
- 94 -
構文
symfoware.default_user = 認可識別子
パラメタ
認可識別子 :
認可識別子を指定してください。
7.2.3 symfoware.default_pw
説明
symfoware.default_pwは、接続でパスワードを省略した時に代わりに指定するパスワードを設定します。
symfoware.default_pwを省略した場合、パスワードは空文字となります。
構文
symfoware.default_pw = パスワード
パラメタ
パスワード :
パスワードを指定してください。
7.2.4 symfoware.allow_persistent
説明
symfoware.allow_persistent は、持続的な接続を可能とするか否かを設定します。持続的な接続の詳細は、 “ 4.2.33symfoware_pconnect”を参照してください。
symfoware.allow_persistentを省略した場合、持続的な接続を可能とします。
構文
symfoware.allow_persistent = On | Off
パラメタ
On :
持続的な接続を可能とする場合、Onを指定してください。
Off :
持続的な接続を不可能とする場合、Offを指定してください。
7.2.5 symfoware.check_persistent
説明
symfoware.check_persistentは、持続的な接続を行う前に、接続が有効であるかを判定するか否かを設定します。持続的な接続の詳
細は、“4.2.33 symfoware_pconnect”を参照してください。
symfoware.check_persistentを省略した場合、接続が有効であるかを判定します。
構文
symfoware.check_persistent = On | Off
- 95 -
パラメタ
On :
接続が有効であるかを判定する場合、Onを指定してください。
Off :
接続が有効であるかを判定しない場合、Offを指定してください。
7.2.6 symfoware.max_persistent
説明
symfoware.max_persistentは、持続的な接続の 大数を設定します。持続的な接続の詳細は、“4.2.33 symfoware_pconnect”を参照し
てください。
構文
symfoware.max_persistent = 大接続数
パラメタ
大接続数 :
持続的な接続の 大数を指定してください。
持続的な接続を無限とする場合、-1を指定してください。
7.2.7 symfoware.max_links
説明
symfoware.max_linksは、接続の 大数を設定します。
接続の 大数には、持続的な接続を含みます。持続的な接続の詳細は、“4.2.33 symfoware_pconnect”を参照してください。
構文
symfoware.max_links = 大接続数
パラメタ
大接続数 :
接続の 大数を指定してください。
接続を無限とする場合、-1を指定してください。
7.2.8 symfoware.defaultlrl
説明
symfoware.defaultlrlは、フェッチするデータの長さ(バイト数)の省略値を設定します。
省略値は、4096です。
構文
symfoware.defaultlrl = データ長
パラメタ
データ長 :
フェッチするデータの長さを指定してください。
- 96 -
7.2.9 symfoware.defaultbinmode
説明
symfoware.defaultbinmodeは、バイナリデータの処理方法を設定します。
省略値は1です。
バイナリデータの処理方法の詳細は、“4.2.2 symfoware_binmode”を参照してください。
構文
symfoware.defaultbinmode = モード
パラメタ
モード:
バイナリデータをそのまま出力に渡す場合、0を指定してください。
バイナリデータのままとする場合、1を指定してください。
16進文字表記の文字列とする場合、2を指定してください。
- 97 -
第8章 RDBコマンドの呼び出し
本章では、PHPのコマンド呼び出し機能を用いてPHPからRDBコマンドを呼び出す方法について説明します。
8.1 RDBコマンドの呼び出し方法
8.2 RDBコマンドの呼び出し例
8.1 RDBコマンドの呼び出し方法
RDBコマンドの呼び出し方法について説明します。
RDBコマンドの呼び出しとは
PHPにはコマンドを呼び出す機能が用意されています。この機能を用いてRDBコマンドを呼び出すことが可能です。
RDBコマンドを実行するマシン
PHPスクリプトからRDBコマンドを呼び出したとき、PHPスクリプトを実行しているマシン以外のSymfoware/RDBに対するRDBコマンドが
呼び出されます。PHPスクリプトを実行しているマシン以外のSymfoware/RDBに対するRDBコマンドの呼び出しはできません。
RDBコマンドを実行するユーザ
PHPスクリプトからRDBコマンドを呼び出したとき、Apache動作環境ファイルのUserディレクティブで指定したユーザ(デフォルトは
nobody、Symfoware/RDBは大文字のNOBODYとして扱う)がRDBコマンドを実行するユーザとなります。
PHPスクリプトから、実行するユーザを判定するRDBコマンドを呼び出す場合、PHPスクリプトを実行するユーザ(NOBODYや
SYSTEM)に対し、資源を操作することのできる権限を与える必要があります。実行するユーザを判定するRDBコマンドや権限の詳細
は、“RDB管理者ガイド”の“各操作で必要な権限”を参照してください。
PHPスクリプトの実行者の考慮
PHPスクリプトでRDBコマンドの呼び出しを行うようにすると、WWWブラウザからPHPスクリプトを実行できるすべての人がRDBコマンド
を実行できることになってしまいます。
よって、Apacheのアクセス制御機能を用いるなどの対処を行うことでて、PHPスクリプトの実行者を限定することを推奨します。
Apacheのアクセス制御機能には、ユーザ名によるアクセス制御、IPアドレスによるアクセス制御があります。
8.2 RDBコマンドの呼び出し例
RDBコマンドの呼び出し例について説明します。
8.2.1 systemを用いたRDBコマンドの呼び出し
systemを用いたRDBコマンドの呼び出しについて説明します。
systemとは
systemは、コマンドを実行し、コマンドの結果文字列をそのまま表示し、コマンドの復帰値とコマンドの結果文字列の 終行を返却しま
す。
systemは、標準入力によるデータを必要としないRDBコマンドの呼び出しに使用することができます。
systemを用いたRDBコマンドの呼び出し例
systemを用いたRDBコマンドの呼び出し例を以下に示します。
<HTML>
<BODY>
<PRE>
<?php
- 98 -
$str = system( "rdbps 2>&1", $rc ) ;
printf( "rc : %d¥n", $rc ) ;
printf( "str : %s¥n", $str ) ;
?>
</PRE>
</BODY>
</HTML>
8.2.2 execを用いたRDBコマンドの呼び出し
execを用いたRDBコマンドの呼び出しについて説明します。
execとは
execは、コマンドを実行し、コマンドの結果文字列の配列、コマンドの復帰値とコマンドの結果文字列の 終行を返却します。コマンド
の結果文字列は表示されません。
execは、標準入力によるデータを必要としないRDBコマンドの呼び出しに使用することができます。
execを用いたRDBコマンドの呼び出し例
execを用いたRDBコマンドの呼び出し例を以下に示します。
<HTML>
<BODY>
<PRE>
<?php
$str = exec( "rdbps 2>&1", $values, $rc ) ;
printf( "rc : %d¥n", $rc ) ;
printf( "str : %s¥n", $str ) ;
foreach( $values as $value ) {
printf( "%s¥n", $value ) ;
}
?>
</PRE>
</BODY>
</HTML>
8.2.3 popenを用いたRDBコマンドの呼び出し
popenを用いたRDBコマンドの呼び出しについて説明します。
popenとは
popenは、コマンドに対する標準入力または標準出力のハンドルを返却します。
popenは、標準入力を送り込むか標準出力のデータを受け取るかのどちらかとなります。また、コマンドの復帰値を得ることができませ
ん。よって、実用的に使えるものとはいえません。
将来的には、proc_openによって、コマンドに対して標準入力、標準出力と標準エラー出力に対する操作が可能となり、かつ、復帰値
を得ることができるようになる予定です。
- 99 -
第9章 注意事項
PHPからSymfoware/RDBのデータベースをアクセスするときの注意事項について説明します。
9.1 PHP Symfowareの制限
9.2 RDBコマンドの呼び出しの制限
9.3 マルチバイト文字列の注意
9.1 PHP Symfowareの制限
PHP Symfowareの制限について説明します。
自動コミットの動作
自動コミットにおいて、検索中に他のSQL文を実行すると、検索を続けることができなくなります。また、複数の検索を行っているときに、
ある1つの検索が終了すると他の検索を続けることができなくなります。検索中に他のSQL文を実行するときや複数の検索を行う場合
は、自動コミットを使用しないでください。
文字列長の制限
文字列型において、取り出すときの長さが32000バイトを超えるものは検索できません。データベース内部文字コードの長さより取り出
すときの文字コードの長さが延びる場合は、32000を超えることがありますので注意が必要です。
動的パラメタの制限
動的パラメタの精度と位取りは、対応する列の精度と位取りを採用します。
格納構造がOBJECTの場合の制限
格納構造がOBJECTの場合、BLOB型の列をフェッチすることはできません。
値式の制限
値式にROW_ID(行識別子)を指定することはできません。
列名の取得の制限
symfoware_field_nameを用いて選択リストの列名を取得した時、列名は必ずOSの文字コード系となります。
9.2 RDBコマンドの呼び出しの制限
RDBコマンド呼び出しの制限について説明します。
PHP SymfowareによるデータベースアクセスとRDBコマンドの呼び出しの混在不可
PHPスクリプトからRDBコマンドを呼び出したとき、PHPインタプリタのプロセスからRDBコマンドのプロセスが生成されます。
PHPスクリプトからPHP Symfowareを用いたSymfoware/RDBへのアクセス中にRDBコマンドを呼び出した場合、PHPスクリプトのプロセスと
RDBコマンドのプロセスの間で排他が発生し、排他エラーや排他待ちが発生する可能性があります。
よって、PHPスクリプトからPHP Symfowareを用いたSymfoware/RDBへのアクセス中にRDBコマンドを呼び出さないでください。
排他の詳細は、“RDB ユーザーズガイド データベース定義編”の“応用プログラムおよびRDBコマンド間の排他”を参照してください。
停止しないRDBコマンドの呼び出し不可
rdblkinfコマンドに-dオプションを指定した場合、rdblkinfコマンドは強制停止が行われるまで実行中となります。
PHPスクリプトから実行中のコマンドを強制停止する方法がありません。
よって、PHPスクリプトから停止しないRDBコマンドを呼び出さないようにしてください。
- 100 -
9.3 マルチバイト文字列の注意
マルチバイト文字列の注意について説明します。
9.3.1 マルチバイト文字列の問題
マルチバイト文字列の問題について説明します。
マルチバイト文字列の問題とは
PHPには、PHPスクリプト中の文字にEUC(Extended UNIX Code)、シフトJISコードが含まれているときの考慮が足りません。そのため
いくつかの問題が起こることが分かっています。
正規表現の問題
文字列が"A"から"Z"の範囲であることを判定する場合に"A-Z"という正規表現を用います。一方、文字列が"あ"から"ん"の範囲である
ことを判定する場合に"あ-ん"という正規表現を用いても、期待する結果になりません。
文字列長、部分文字列の問題
処理の内容によっては、文字"あ"を一文字と換算したいことがありますが、、文字列の長さはバイト数です。よって、"あいうえお"の長さは
10バイトであり、マルチバイト文字列"あいうえお"から二文字目を取り出すと、"い"ではなく"あ"の後方1バイトの文字となります。
シフトJIS文字列の0x5cの問題
シフトJIS文字列中に16進数で0x5c(¥)の文字を含む場合、PHPの構文エラーとなります。これを避けるためには、EUCコードのPHPスクリプトに書き直すか、0x5cの前に0x5cを指定する必要があります。
0x5cの前に0x5cを指定する例を以下に示します。
<HTML>
<BODY>
<PRE>
<?php
$connection_id = symfoware_connect( "RDBDB", "rdbmng", "******" ) or die( symfoware_errormsg() ) ;
@symfoware_exec( $connection_id, "DROP TABLE STOCKS.在庫表¥ CASCADE" ) ;
symfoware_exec( $connection_id, "CREATE TABLE STOCKS.在庫表¥ ( 製品番号 INTEGER NOT NULL, 製品名 CHAR(20)
NOT NULL, 在庫数量 INTEGER, 倉庫番号 SMALLINT NOT NULL ) ON DBSP1" ) or
die( symfoware_errormsg( $connection_id ) ) ;
symfoware_exec( $connection_id, "INSERT INTO STOCKS.在庫表¥ VALUES( 140, '演奏装置', 120, 2 )" ) or
die( symfoware_errormsg( $connection_id ) ) ;
symfoware_exec( $connection_id, "INSERT INTO STOCKS.在庫表¥ VALUES( 110, '表¥示装置', 85, 2 )" ) or
die( symfoware_errormsg( $connection_id ) ) ;
$result_id = symfoware_prepare( $connection_id, "SELECT * FROM STOCKS.在庫表¥" ) or
die( symfoware_errormsg( $connection_id ) ) ;
symfoware_execute( $result_id ) ;
while( symfoware_fetch_row( $result_id ) ) {
for( $x = 1 ; $x <= symfoware_num_fields( $result_id ) ; $x ++ ) {
if( $x != 1 ) printf( " " ) ;
printf( "%s", symfoware_result( $result_id, $x ) ) ;
}
printf( "¥n" ) ;
}
symfoware_close( $connection_id ) ;
?>
</PRE>
</BODY>
</HTML>
9.3.2 UTF-8UTF-8について説明します。
- 101 -
UTF-8
“9.3.1 マルチバイト文字列の問題”で述べた問題を解決するために、UTF-8を用いることが考えられます。
PHPはUTF-8をサポートしています。よって、UTF-8を用いてPHPスクリプトを作成することが可能です。
PHPスクリプトをUTF-8で作成した場合、環境変数RDBCHARSET、RDBNCHARにUTF8を指定してください。環境変数
RDBCHARSET、RDBNCHARの詳細は、“RDBユーザーズガイド 応用プログラム開発編”の“環境変数”を参照してください。
UTF-8での動作は、ご自身の責任でお願いします。
9.3.3 マルチバイト対応関数
マルチバイト対応関数について説明します。
マルチバイト対応正規表現関数
“9.3.1 マルチバイト文字列の問題”の“正規表現の問題”で述べた問題を解決するために、PHP 4.2.0以降でmbregex関数が組み込ま
れています。
PHPのビルドオプションに“--enable-mbregex”を指定します。PHPのビルドオプションについては、“2.1.7 PHPのインストール”を参照し
てください。
マルチバイト正規表現関数の動作については、ご自身の責任でお願いします。
マルチバイト対応文字列関数
“9.3.1 マルチバイト文字列の問題”の“文字列長、部分文字列の問題”で述べた問題を解決するために、PHPにmbstring関数が組み
込まれています。
PHPのビルドオプションに“--enable-mbstring”を指定します。PHPのビルドオプションについては、“2.1.7 PHPのインストール”を参照し
てください。
マルチバイト対応文字列関数の動作については、ご自身の責任でお願いします。
9.3.4 シフトJIS対応PHPシフトSJIS対応PHPについて説明します。
シフトJIS対応PHP
“9.3.1 マルチバイト文字列の問題”の“シフトJIS文字列の0x5cの問題”で述べた問題を解決するために、日本の有志によってシフトJIS対応PHPを開発、公開しています。
シフトJIS対応PHPの動作については、ご自身の責任でお願いします。
- 102 -
付録A connect、pconnectのパラメタの記述形式
connect、pconnectのパラメタの記述形式について説明します。
パラメタの記述形式
パラメタは、“CLI_”で始まる文字列です。複数のパラメタを指定する場合は、セミコロン“;”で区切って記述します。
パラメタの種類
パラメタには、以下のものがあります。
CLI_BUFFER_SIZE
CLI_CAL_ERROR
CLI_CHAR_SET
CLI_CHARACTER_TRANSLATE
CLI_COREFILE_PATH
CLI_DEFAULT_INDEX_SIZE
CLI_DEFAULT_OBJECT_TABLE_SIZE
CLI_DEFAULT_TABLE_SIZE
CLI_DSI_EXPAND_POINT
CLI_DSO_LOCK
CLI_INCLUSION_DSI
CLI_ISOLATION_WAIT
CLI_MAX_SQL (注1)
CLI_MSG_LANG
CLI_NCHAR_CODE
CLI_OPL_BUFFER_SIZE (注2)
CLI_PARALLEL_SCAN
CLI_R_LOCK
CLI_RCV_MODE
CLI_RESULT_BUFFER
CLI_ROUTINE_SNAP
CLI_SERVER_ENV_FILE
CLI_SORT_MEM_SIZE
CLI_STORAGE_AREA_AUTO_SET
CLI_SQL_LEVEL
CLI_SQL_SNAP
CLI_TRAN_SPEC
CLI_WAIT_TIME
CLI_WORK_ALLOC_SPACESIZE (注3)
CLI_WORK_PATH
注1) 現状、CLI_MAX_SQLに指定できるSQL文の数は2~255です。将来的に2~32000となる予定です。
注2) 現状、CLI_OPL_BUFFER_SIZEに指定できるバッファサイズは1~10240です。将来的に1~1280000となる予定です。
- 103 -
注3) 現状、CLI_WORK_ALLOC_SPACESIZEに指定できる初期量は5000~50000、増分量は1000~100000です。将来的に5000~1000000、1000~1000000となる予定です。
パラメタの形式
パラメタの形式は、クライアント動作環境ファイルの仕様に準拠しています。connect、pconnectで指定できるオプションの先頭の“CLI_”を取り除いたものが、クライント用動作環境ファイルのパラメタに一致します。ただし、CLI_STORAGE_AREA_AUTO_SETは、“CLI_STORAGE_AREA_AUTO_SET”を参照してください。
クライアント用動作環境ファイルのパラメタの詳細は、“RDBユーザーズガイド 応用プログラム開発編”の“クライアント用の動作環境ファ
イルの作成”を参照してください。
CLI_STORAGE_AREA_AUTO_SET
説明
CLI_STORAGE_AREA_AUTO_SETは、格納領域指定を省略した表定義、インデックス定義に対し、格納領域指定を付加するか
否かを設定します。
CLI_STORAGE_AREA_AUTO_SETのデフォルトは、格納領域指定を付加します。
形式
CLI_STORAGE_AREA_AUTO_SET = ( YES | NO )
パラメタ
YES:
格納領域指定を省略した表定義、インデックス定義に対し、格納領域指定を付加します。
NO:
格納領域指定を省略した表定義、インデックス定義に対し、格納領域指定を付加しません。
- 104 -
付録B PHP Symfowareの修正履歴
PHP Symfowareソースの修正履歴について説明します。
PHP Symfoware 1.0.0
PHP Symfowareの初版です。
- 105 -
付録C PHP Symfowareのソースの構成
PHP Symfowareのソースの構成について説明します。
ご自身でPHP Symfowareをカスタマイズする場合の参考にしてください。カスタマイズ後のPHP Symfowareの動作については、ご自身
の責任でお願いします。
PHP Symfowareの開発経緯
PHP Symfowareは、PHPグループ(http://www.php.net/downloads.php)で公開されているソース(php-4.2.2.tar.gz)のODBCのソースを
流用し、ODBC(Open Database Connectivity)関数呼び出しをSymfoware/RDBのCLI(Call Level Interface)関数呼び出しに変更し、
Symfoware/RDBに 適なインタフェースとなるように一部の処理を修正しています。Symfoware/RDBのCLI関数の詳細は、富士通の
技術員に問合せ願います。
PHP Symfowareのソースの構成
PHP Symfowareをカスタマイズする場合、主に以下の3つのソースファイルを修正することになります。
php_symfoware.c
php_symfoware.cは、PHPから呼び出されるPHPモジュールのサブルーチン群で、C言語で記述されています。
db_symfoware.inc
db_symfoware.incは、PHPlibから呼び出されるプログラムで、PHPスクリプトで記述されています。
symfoware.php
symfoware.phpは、PEARから呼び出されるプログラムで、PHPスクリプトで記述されています。
- 106 -
用語集
アーカイバ
複数のファイルをデータ圧縮してアーカイブファイルを作成したり、アーカイブファイルを展開しなおして複数のファイルに戻す機
能をもったソフトウェアです。
アーカイブ
アーカイバを用いて複数のファイルをデータ圧縮してアーカイブファイルにしたものです。
一時表
応用プログラムの利用者に対して専用に作成される表です。複数の利用者から、それぞれ同一の表名で利用することができま
す。応用プログラムで処理中のデータの一時的な退避など、他の応用プログラムから独立した利用ができる表です。
一時表名
一時表の名前です。
インストーラ
プログラムをマシンに入れるプログラムです。
インストール
プログラムをマシンに入れることです。
インタプリタ
実行時にプログラムテキストの内容を解析しながら処理を行う形態の言語処理ソフトウェアです。
オブジェクト
処理と処理に付随するデータを一つのまとまりとして管理する構造の実体です。
オブジェクト思考
処理と処理に付随するデータを一つのまとまりとして管理し、プログラムを構造化する考え方です。
概数型
おおよその数を表すデータ型であり、FLOAT、REAL、DOUBLE PRECISIONがあります。
外部プログラム
PHPスクリプトの処理から関数インタフェースやクラスインタフェースで呼び出すことができるプログラムです。
カーソル
データの操作において、操作の対象とする行を指示する指示子のことを“カーソル”と呼びます。カーソルはカーソル宣言で定義
します。そして、OPEN文でカーソル使用の開始を、FETCH文でカーソルの移動を、CLOSE文でカーソル使用の終了を行います。
カーソル名
カーソルの名前です。
各国語文字列型
各国語文字列を表すデータ型であり、NCHAR、NCHAR VARYINGがあります。
行
表の構成要素です。リレーショナルデータベースでは、データを行と列からなる二次元の表で表現します。
- 107 -
クラスインタフェース
処理と処理に付随するデータを一つのまとまりとして管理しているものに対し、処理の呼び出しや処理に付随するデータを参照、
設定する方法を規定したものです。
警告の発行
軽微なエラーが発生したことを通知することです。
コミット
処理中のトランザクションのデータ操作の有効化をコミットと呼びます。トランザクションの中でのデータ操作が実際にデータベー
スに反映されます。コミットは、応用プログラムが意図的にCOMMIT文を発行することで制御します。
関連用語:ロールバック
関数インタフェース
処理を行う関数を呼び出す方法を規定したものです。
位取り
一部の真数型、概数型に指定するデータの小数部の長さです。
時間隔型
時間の間隔(たとえば、10年と10ヶ月間)を表すデータ型であり、INTERVAL YEAR、INTERVAL MONTH、INTERVAL DAY、
INTERVAL HOUR、INTERVAL MINUTE、INTERVAL SECOND、INTERVAL YEAR TO MONTH、INTERVAL DAY TOHOUR、INTERVAL DAY TO MINUTE、INTERVAL DAY TO SECOND、INTERVAL HOUR TO MINUTE、INTERVAL HOURTO SECOND、INTERVAL MINUTE TO SECONDがあります。
システム表
Symfoware/RDBの利用者が定義したデータベースやスキーマなどの定義情報を管理する表です。RDBディクショナリと呼ぶこと
もあります。
システム表名
システム表の名前です。
自動的にコミット
SQL文の実行後に自動的にコミットすることです。
シフトJIS
JISコードをもとに半角カナを1バイト、日本語を2バイトで表現した文字コード系です。
真数型
正確な数を表すデータ型であり、INTEGER、SMALLINT、NUMERIC、DECIMALがあります。
スキーマ
データベースを構成する要素です。Symfoware/RDBでは、情報分析システム分析技法AA/BRMODELLINGを利用してデータ
分析を行って、表またはビュー表を作成します。これらの表の集まりを“スキーマ”と定義します。
スキーマ名
スキーマの名前です。
ステートメントハンドル
SQL文を準備して獲得したオブジェクトです。
正規表現
文字列を照合するためのパターン文字列です。
- 108 -
精度
一部の真数型、概数型に指定するデータの整数部と小数部を合わせた長さです。
探索条件
SQL文でデータベースの操作対象の行を特定するために指定する条件です。
データ型
SQLのデータ型であり、文字列型、各国語文字列型、真数型、概数型、日時型、時間隔型があります。
データソース名
接続するデータベースの情報をDBIに渡すための文字列であり、"dbi:ドライバ名:DBDに渡す文字列"です。
データベース(1)
大量のデータを効率的に格納、検索するソフトウェアです。
データベース(2)
RDBシステム内に配下に作成する論理的な構造で、配下にデータベーススペース、スキーマなどが定義されます。
データベースアクセスで影響を受けた行数
データベースに対する操作によって操作された行数です。
データベーススペース
実表やインデックスを格納する領域を“データベーススペース”と呼びます。データベーススペースの作成は、物理構造定義で行
います。
データベーススペース名
データベーススペースに対して付ける名前です。
データベースのアクセス
データベースに対する操作を行うことです。
データベースベンダ
データベースシステムを提供する会社または団体です。
データベース名
データベースは、1つのサーバシステム上に、管理・設計の単位としていくつも作成することができます。これらのデータベースを
認識するために、サーバシステム上で唯一無二の名前を付けます。これを“データベース名”と呼びます。
動的パラメタ
問合せ指定、INSERT文、UPDATE文:探索、DELETE文:探索に指定するクエスチョンマーク“?”です。
日時型
日、時間、日時を表すデータ型であり、DATE、TIME、TIMESTAMPがあります。
パッケージ
Sun OSでソフトウェアを提供する形態です。
ハンドル
獲得したオブジェクトを指す別称です。
ビュー表
スキーマ配下に作成する論理的な構造で、表の一部の列と対象の行を特定するための条件で構成されています。
- 109 -
ビュー表名
ビュー表の名前です。
表
リレーショナルデータベースでは、データを行と列からなる二次元の表で表現しています。表には、実表とビュー表の2種類があり
ます。
表名
表に付けた名前です。表名は、スキーマ定義で設定します。そして、データ操作のSQL文で、操作の対象とする表を指定するた
めに使用します。
ビルド
ソースで提供されたPHPやPHPモジュールをコンパイルおよびリンクすることです。
フェッチ
データベースの内容を行ごとに読み込むことです。
不定、NULL
値が設定されていない状態を表します。
部分文字列
文字列から任意の範囲で一部の文字列を取り出したものです。
プロシジャルーチン
SQLによるデータベースの処理手続きの定義体をプロシジャルーチンと呼びます。
プロシジャルーチン名
プロシジャルーチンの名前です。
ホスト名
Symfoware/RDBリモートアクセスする場合において、マシン名からIPアドレスを解決できる場合はマシン名、マシン名からIPアドレ
スを解決できないならばIPアドレス(xxx.xxx.xxx.xxxの形式)です。
ポート番号
リモートのSymfoware/RDBに接続する場合において、サーバマシン側で設定したTCP/IP通信を受け付ける番号で、1025から65535までの数値です。
文字列型
文字列を表すデータ型であり、CHAR、CHAR VARYINGがあります。
列
表の構成要素です。リレーショナルデータベースでは、データを行と列からなる二次元の表で表現しています。
連想配列
複数の値を名前で対応付けて値を保持する変数です。
ログイン
Linuxのマシンの操作を開始することです。
ロールバック
処理中のトランザクションのデータ操作の無効化をロールバックと呼びます。ロールバックには、データ操作のSQL文単位のロー
ルバックと、トランザクション単位のロールバックの2つがあります。代表的なものでは、前者には、データ操作の例外状態の発生、
後者には、応用プログラムが意図したROLLBACK文の発行があります。
- 110 -
関連用語:コミット
選択リスト
問合せ指定で指定する検索する列の並びです。
マウント
CDを読み込むことができるようCD-ROM装置を接続することです。
マルチバイト文字
複数バイトで1文字を表す文字で、EUC(Extended UNIX Code)、シフトJIS、UTF-8などがあります。
文字列長(1)
SQLにおいて、文字列型ではパイト数、各国語文字列型では文字数です。
文字列長(2)
PHPスクリプトにおいて、バイト数です。
BLOB型(BINARY LARGE OBJECT型)
大きいバイナリデータを表すデータ型です。
CLI(Call Level Interface)
Cプログラムから関数インタフェースでデータベースアクセスを行うインタフェースです。
DBクラス
データベースの接続を管理するクラスです。
DB_Errorクラス
データベースのエラー状態を保持するクラスです。
DB_Resultクラス
データベースの検索結果を管理するクラスです。
DB_Warningクラス
データベースの警告状態を保持するクラスです。
LGPL(Library GNU General Public License:ライブラリ一般公共利用承諾、または、Lesser GNU General PublicLicense:劣等一般公共利用承諾)
PHPのライブラリの公開について定めたもので、製品を使用する自由や製品に動作保証がないことなどが規定されています。
LIKE述語
SQL文の探索条件に指定し、文字列型、各国語文字列型の列と照合文字列との比較を行います。
NULL
表中の行について、ある列のデータの値が未定義である状態をNULLとよびます。
NULLを持つ可能性
データベースの列の値が不定になることがあることを表します。
PEAR(PHP Extension and Application Repository)
複数のデータベースベンダのデータベースアクセスを1つのクラスインタフェースで行うなど、有用なクラスを集めたライブラリです。
PHP(Hypertext Preprocessor)
インタプリタ型のプログラミング言語で、WWWサーバ上で動作し、動的なHTML文書を作成することができます。
- 111 -
PHPlib(PHP Base Library)
セション機能、認証機能、パーミッション機能、ユーザ変数機能など、有用なクラスを集めたライブラリです。
PHP 3
PHP 4より一世代古いPHPです。
PHP 4
新のPHPの総称です。
PHP 4.2.2
新のPHPです。
PHP License
PHPに関する製品の公開について定めたもので、製品を使用する自由や製品に動作保証がないことなどが規定されています。
PHP Symfoware
Symfoware/RDB固有のデータベースアクセスの処理を行う機能です。
PHPスクリプト
PHPが処理するプログラムです。
PHPモジュール
PHPスクリプトから関数インタフェースやクラスインタフェースで呼び出す外部モジュールです。
RDBコマンド
Symfoware/RDBのシステム管理の操作を行うコマンドです。
SQLCODE
過去のSQLインタフェースで、データベースアクセスのエラーコードを表します。
SQLSTATE
データベースアクセスの状態を5バイトの文字で表し、正常な場合は"00000"です。
SQLMSG
データベースアクセスのエラーメッセージの文字列です。
SQL文
データベースをアクセスするための文です。
SQLデータ型番号
データベースで扱うことができるデータ型に対して一意な番号を付けたものです。
SQL文の準備
SQL文を繰り返し実行できるよう準備することです。
Symfoware
Symfowareは、高性能で高信頼なデータベースエンジンを持ち、インターネットビジネス時代のミッションクリティカルシステムおよ
び戦略的な情報活用の支援に適したデータベースシステムです。
Symfoware/RDB
Symfoware ServerとSymfoware Clientの総称です。
- 112 -
Symfoware/RDBにリモートアクセス
データベースアクセスを依頼するマシンが他のマシンのSymfoware/RDBに接続することです。
Symfoware/RDBにローカルアクセス
データベースアクセスを依頼するマシンが同一のSymfoware/RDBに接続することです。
Symfoware Server
Symfoware/RDBのデータベースアクセスの依頼を受け付けるサーバソフトウェアです。
Symfoware Client
Symfoware/RDBのデータベースアクセスの依頼を行うクライアントソフトウェアです。
UNIXマシン
UNIXのOSがインストールされたマシンです。
UTF-8
世界の各国語文字を統一的に扱うことができるマルチバイトの文字コード系であるUnicodeの規格の一つです。
$
変数名の先頭の$は、値を保持することを表します。
&
変数名の先頭の&は、値そのものではなく値の領域を参照することを表します。
- 113 -
索 引[A]
affected Rows...........................................................................76Apacheのインストール................................................................4Apacheのセットアップ...............................................................10autoCommit..............................................................................78
[C]Cacheクラス...............................................................................87CLI_STORAGE_AREA_AUTO_SET..................................104commit......................................................................................78connect......................................................................................59connect、pconnectのパラメタの記述形式..............................103createSequence.........................................................................77
[D]DB_Errorクラス.........................................................................86DB_Resultクラス.......................................................................80db_symfoware.inc...................................................................106DB_Warningクラス...................................................................87DBクラス...................................................................................58DBクラスのインクルード...........................................................58disconnect.................................................................................60dropSequence............................................................................77
[E]errorNative................................................................................79execute......................................................................................65executeMultiple........................................................................66execとは....................................................................................99execを用いたRDBコマンドの呼び出し....................................99execを用いたRDBコマンドの呼び出し例................................99
[F]fetchInto....................................................................................82fetchRow...................................................................................81free............................................................................................85
[G]getAll........................................................................................74getAssoc....................................................................................72getCol........................................................................................71getListOf...................................................................................77getMessage...............................................................................86getOne.......................................................................................68getRow......................................................................................70
[I]isError.......................................................................................61isWarning..................................................................................61
[L]limitQuery.................................................................................68
[N]nextId........................................................................................77nextResult.................................................................................85numCols....................................................................................84numRows..................................................................................84
[P]PEAR for Symfowareのインストール.........................................7PEAR for Symfowareの概要...................................................57PEAR for Symfowareの仕様...................................................57PEAR for Symfowareのスクリプト例........................................57PEARのセットアップ...................................................................7PEARの特徴............................................................................57PHP 4の新機能........................................................................88PHPlib for Symfowareのインストール........................................9PHPlib for Symfowareの概要..................................................88PHPlib for Symfowareの仕様..................................................88PHPlibで使用するファイル......................................................88PHPlibのインストール.................................................................8PHPlibの使用例.......................................................................90PHPlibのセットアップ..................................................................9PHPlibの選択...........................................................................88PHPlibの特徴...........................................................................88PHPlib読み込みPHPスクリプトファイル...................................90PHPlibローカル定義ファイル...................................................88PHP Symfoware 1.0.0............................................................105PHP Symfowareとは...................................................................1PHP SymfowareによるデータベースアクセスとRDBコマンドの
呼び出しの混在不可.............................................................100PHP Symfowareのインストール.................................................6PHP Symfowareの開発経緯..................................................106PHP Symfowareの概要..............................................................1PHP Symfowareの環境設定....................................................94PHP Symfowareの規約............................................................13PHP Symfowareの公開形態......................................................2PHP Symfowareの修正履歴..................................................105PHP Symfowareの使用............................................................12PHP Symfowareの仕様............................................................13PHP Symfowareの制限..........................................................100PHP Symfowareのソースの構成............................................106PHP Symfowareの動作環境の設定形式................................94PHP Symfowareの導入..............................................................3php_symfoware.c....................................................................106PHP環境php.ini........................................................................94PHPスクリプト、PHPモジュール、クラスインタフェース..............1PHPスクリプトの作成および実行.............................................12PHPスクリプトの実行者の考慮................................................98PHP動作環境ファイル.............................................................94PHPとは......................................................................................1PHPのインストール.....................................................................5PHPの公開形態.........................................................................1PHPのデータベースアクセス.....................................................1PHPのデータベースアクセスの抽象化.....................................1PHPの動作環境を表示するPHPスクリプトの作成および実行....12PHPのビルドで使用するコマンドのインストール.......................5PHPのライブラリ..........................................................................2popenとは..................................................................................99popenを用いたRDBコマンドの呼び出し.................................99prepare......................................................................................64provides....................................................................................62
- 114 -
[Q]query.........................................................................................67quote.........................................................................................61
[R]RDBコマンドの呼び出し..........................................................98RDBコマンドの呼び出しとは...................................................98RDBコマンドの呼び出し方法..................................................98RDBコマンドの呼び出し例......................................................98RDBコマンド呼び出しの制限................................................100RDBコマンドを実行するマシン...............................................98RDBコマンドを実行するユーザ...............................................98require_once.............................................................................58rollback.....................................................................................79
[S]setFetchMode............................................................................63SQL文の規約...........................................................................14symfoware.allow_persistent.....................................................95symfoware.check_persistent.....................................................95symfoware.defaultbinmode......................................................97symfoware.defaultlrl.................................................................96symfoware.default_db..............................................................94symfoware.default_pw.............................................................95symfoware.default_user............................................................94symfoware.max_links...............................................................96symfoware.max_persistent.......................................................96symfoware.php.......................................................................106Symfoware/RDBにリモートアクセスする場合のSymfowareのイ
ンストール...................................................................................4symfoware_autocommit...........................................................17symfoware_binmode................................................................18symfoware_close......................................................................19symfoware_close_all................................................................20symfoware_columnprivileges...................................................20symfoware_columns.................................................................20symfoware_commit..................................................................23symfoware_connect..................................................................23symfoware_cursor....................................................................24symfoware_do..........................................................................25symfoware_error.......................................................................25symfoware_errormsg................................................................27symfoware_exec.......................................................................27symfoware_execute..................................................................28symfoware_fetch_array............................................................29symfoware_fetch_into..............................................................30symfoware_fetch_object...........................................................31symfoware_fetch_row..............................................................32symfoware_field_len................................................................34symfoware_field_name............................................................34symfoware_field_num..............................................................35symfoware_field_precision......................................................35symfoware_field_scale.............................................................36symfoware_field_type..............................................................36symfoware_foreignkeys............................................................37symfoware_free_result.............................................................37symfoware_gettypeinfo............................................................38symfoware_isnull......................................................................42
symfoware_longreadlen............................................................42symfoware_next_result.............................................................43symfoware_num_fields............................................................43symfoware_num_rows..............................................................44symfoware_pconnect................................................................45symfoware_prepare..................................................................46symfoware_primarykeys..........................................................47symfoware_procedurecolumns.................................................48symfoware_procedures.............................................................51symfoware_result......................................................................52symfoware_result_all................................................................53symfoware_rollback.................................................................53symfoware_setoption................................................................54symfoware_specialcolumns......................................................54symfoware_statistics.................................................................54symfoware_tableprivileges.......................................................54symfoware_tables.....................................................................54Symfoware関数........................................................................17Symfoware関数のインストール..................................................6Symfoware関数の概要............................................................16Symfoware関数の仕様............................................................16Symfoware関数のスクリプト例.................................................16Symfoware/RDBにローカルアクセスする場合のSymfowareのイ
ンストール...................................................................................4Symfowareのインストール..........................................................4systemとは................................................................................98systemを用いたRDBコマンドの呼び出し................................98systemを用いたRDBコマンドの呼び出し例............................98
[T]tableInfo....................................................................................77toString.....................................................................................87
[U]UTF-8.....................................................................................101
[あ]値式の制限............................................................................100アーカイバのインストール..........................................................4インストール済みパッケージ......................................................3インストール済みパッケージのアンインストール.......................3
[か]格納構造がOBJECTの場合の制限......................................100偽、FALSE...............................................................................14コンパイラのインストール............................................................4
[さ]自動コミットの動作.................................................................100シフトJIS対応PHP..................................................................102シフトJIS文字列の0x5cの問題..............................................101従来のデータベースのアクセス.................................................1使用できるSQL文.....................................................................14真、偽........................................................................................14真、TRUE.................................................................................14正規表現の問題....................................................................101セション機能の使用例.............................................................90
- 115 -
[た]ダイジェスト認証機能の使用例...............................................92注意事項................................................................................100停止しないRDBコマンドの呼び出し不可.............................100動的パラメタの制限................................................................100導入方法....................................................................................3
[な]認証機能の使用例..................................................................91
[は]パラメタの記述形式................................................................103パラメタの形式........................................................................104パラメタの種類........................................................................103パラメタの詳細..........................................................................94パーミッション管理機能の使用例............................................92変数の規約..............................................................................13
[ま]マルチバイト対応関数...........................................................102マルチバイト対応正規表現関数...........................................102マルチバイト対応文字列関数...............................................102マルチバイト文字列の注意....................................................101マルチバイト文字列の問題....................................................101マルチバイト文字列の問題とは.............................................101文字列長、部分文字列の問題..............................................101文字列長の制限....................................................................100
[や]ユーザ変数機能の使用例.......................................................93
[ら]列名の取得の制限.................................................................100ログイン認証機能の使用例.....................................................91
- 116 -