SESAM/SQL-Server は、ドイツの Fujitsu Siemens コンピュータにより開
発されたメインフレーム上のデータベースシステムです。このデータベー
スは、ハイエンドのメインフレーム上でオペレーティングシステム
BS2000/OSD を使用して動作します。
数多くのBS2000システムにて実運用され、SESAM/SQL-Server は以下の事
項を実証しています。
PHPスクリプトによるデータベース処理を可能にする PHP3 SESAM インター
フェースが利用可能です。
注意:
SESAMへのアクセスは、CVS版のPHP3でのみ可能で
す。PHP 4は、SESAMデータベースをサポートしま
せん。
これらの関数の動作は、php.iniの設定により変化します。
- sesam_oml
string
ロード可能なSESAMドライバモジュールを含むBS2000 PLAM ライブラ
リの名前。SESAM関数を使用する際に必要。BS2000 PLAMライブラリは、
ACCESS=READ,SHARE=YES に設定する必要があります。これは、Apache
サーバのユーザIDにより読み込み可能とする必要があるためです。
- sesam_configfile
string
SESAMアプリケーション設定ファイルの名前。SESAM関数を使用する際
に必要。BS2000 ファイルは、ApacheのユーザIDにより読み込み可と
する必要があります。
アプリケーション設定ファイルは、通常、次のような設定を有してい
ます。(SESAMリファレンスを参照)
- sesam_messagecatalog
string
SESAMメッセージカタログファイルの名前。多くの場合、このディレ
クティブは不要です。SESAMメッセージファイルがシステムのBS2000
メッセージファイルテーブルにインストールされていない場合にのみ
このディレクティブを設定することが可能です。
メッセージカタログは、ACCESS=READ,SHARE=YES に設定する必要があ
ります。これは、Apache サーバのユーザIDから読み込み可能とする
必要があります。
PHP SESAMインタフェースは、スタンドアロン版をサポートしていません。
Apache モジュール版として組み込まれた場合のみ動作します。Apache
PHP モジュールにおいて、SESAMイン
タフェース は、Apache 用ディレクティブにより設定されます。
表 1. SESAM 設定用ディレクティブ
ディレクティブ | 意味 |
---|
php3_sesam_oml |
ロード可能なSESAMドライバモジュールが含まれるBS2000 PLAM ラ
イブラリの名前。SESAM関数を使用するために必要。
例:
|
php3_sesam_configfile |
SESAM
SESAMアプリケーション設定ファイルの名前。SESAM関数を使用する
際に必要。
例:
通常、次のような設定が含まれます。(SESAMリファレンスマニュ
アルを参照)
|
php3_sesam_messagecatalog |
SESAMメッセージカタログファイルの名前。多くの場合、このディ
レクティブは不要です。SESAMメッセージファイルがシステム
BS2000メッセージファイルてーぶりにインストールされていない場
合にのみ、このディレクティブを設定することが可能です。
例:
|
PHP/SESAMインターフェースの設定に加えて、メインフレーム上のSESAM
データベースサーバー自体を設定する必要があります。これは、次のよ
うになります。
PHPスクリプトとデータベースハンドラの間の接続を得るには、選択した
SESAM設定ファイルのパラメータ CNF および
NAM が実行中のデータベースハンドラのIDに一致し
ている必要があります。
分散型データベースの場合、ホストおよびデータベース名を有する分配
テーブルを指定してSESAM/SQL-DCNエージェントを開始する必要がありま
す。
(POSIXサブシステムで実行されている)PHPと(POSIXサブシステムの外で
実行されている)データベースハンドラの間の通信は、SQLSCIという名前
の特別なドライバモジュールと通常メモリを使用するSESAM接続モジュー
ルで実現されます。通常メモリアクセスのため、そして、PHPはWebサー
バの静的部分であるため、ODBC、JDBC、UTM経由のリモートアクセスは不
要であり、データベースへのアクセスは非常に高速です。
スモールスタブローダ(SESMOD)のみがPHPにリンクされており、SESAM接
続モジュールはSESAMのOML PLAMライブラリからロードされます。
設定の際、このPLAMライブラ
リの名前とSESAM設定ファイルを使用するためのファイルリンクをPHPに
指定する必要があります。(SESAM V3.0 において、SQLSCI は標準配布の
SESAMツールライブラリから入手可能です)
SQLコマンドにおけるシングルクオートのクオートは、(シングルクオー
トの前にバックスラッシュを付加するのではなく、)シングルクオートを
2つ重ねて使用するため、SESAMインターフェースを使用する全てのPHPス
クリプトについて、PHP設定ディレクティブで php3_magic_quotes_gpc
および
php3_magic_quotes_sybase を
On にしておく方が賢明でしょう。
BS2000 モデルの制限のために、ドライバは、Apache サーバがそのサー
バの子プロセスをフォークした後にのみロード可能となります。これは、
各子プロセスの最初のSESAMリクエストを若干遅くしますが、その後のア
クセスへの応答は最高速度となります。
SESAM用の明示的にメッセージカタログを定義した場合、そのカタログは
ドライバがロードされる度(すなわち、最初のSESAMリクエスト時に)にロー
ドされます。BS2000 オペレーティングシステムはメッセージカタログの
ロードに成功した後にメッセージを出力します。このメッセージは、
Apacheのerror_logファイルに送信されます。BS2000は現在、このメッセー
ジの出力を停止することができません。このため、ログを段々と埋めて
いきます。
SESAM OML PLAM ライブラリとSESAM設定ファイルは、Webサーバを実行し
ているユーザIDから読み込み可能であることを確認して下さい。そうで
ない場合、サーバはドライバをロードすることができず、SESAM関数をコー
ルすることができません。また、Apacheサーバを実行しているユーザID
にデータベースへのアクセスが許可されている必要があります。そうで
ない場合、SESAMデータベースハンドラへの接続は失敗します。
SQL "select 型"クエリ用に確保された結果カーソルは、"sequential"ま
たは"scrollable"のどちらかとすることが可能です。"scrollable"カー
ソルで必要なメモリオーバヘッドはより大きいため、デフォルトは
"sequential" です。
"scrollable"カーソルを使用した場合、カーソルは結果集合の中で自由
に移動可能です。各"scrollable"クエリについて、スクロール型のグロー
バルなデフォルト値(SESAM_SEEK_NEXTに初期化され
ます)があり、スクロールオフセットは、
sesam_seek_row() により一回設定されるか、
sesam_fetch_row() によりレコードを取得する度に
設定されるかのどちらかです。"scrollable"カーソルを使用してレコー
ドを取得する際に、スクロール型およびスクロールオフセットのグロー
バルデフォルト値について次のようなポスト処理行われます。
表 2. スクロール後のカーソルに関するポスト処理
スクロール型 | 動作 |
---|
SESAM_SEEK_NEXT | なし |
SESAM_SEEK_PRIOR | なし |
SESAM_SEEK_FIRST |
スクロール型を SESAM_SEEK_NEXT に設定
|
SESAM_SEEK_LAST |
スクロール型を SESAM_SEEK_PRIOR に設定
|
SESAM_SEEK_ABSOLUTE |
内部オフセット値を自動的に増加させる
|
SESAM_SEEK_RELATIVE |
なし。(グローバルデフォルト値 offset
を保持する。これにより、例えば、10個前のレコードを取得すると
いったことが可能になります)
|
PHPでは、配列の添字は(1よりも)0から始まるのが普通なため、いくつか
の調整がSESAMインターフェースで行われています。ある添字配列がネー
ティブのSESAMインターフェースで添字1から始まる際には、PHPインター
フェースでは最初の添字として0を使用します。例えば、
sesam_fetch_row() でカラムを取得する際に、最初
のカラムの添字は0であり、その後のカラム番号はカラム数
($array["count"])に達するまで(カラム数は含まず)増えていきます。
SESAMアプリケーションを他の高級言語からPHPに移植する際には、この
インターフェース上の変更に留意する必要があります。各PHP sesam 関
数の説明の適切な場所に添字が0から始まるという注意が含まれています。
SESAMデータベースへのアクセスが可能な場合、Webサーバのユーザは、
可能な限り小さな権限のみを有している必要があります。多くのデータ
ベースでは許可する必要があるのは読み込み権限のみです。使用する設
定に応じて状況に見合ったアクセス権限を追加して下さい。決してネッ
トからの全てのユーザに全てのデータベースへの完全な制御権を許可し
ないで下さい! データベースを管理するPHPスクリプトへのアクセス制限
は、パスワード制限またはSSLセキュリティにより制限して下さい。
SQLには方言があるため100%互換ではありません。他のデータベースイン
ターフェースからSQLアプリケーションをSESAMに移植する際には、いく
つかの修正が必要になる可能性があります。次のような典型的な差異に
注意する必要があります。
ベンダ固有のデータ型
いくつかのベンダ固有のデータ型は、標準的なSQLデータ型で置換す
る必要があります。(例えば、TEXT は
VARCHAR(max. size)で置換可能です。)
SQL IDと同じキーワード
SESAM では(通常のSQLと同様に)このようなIDは2重引用付で括る(も
しくは名前を変える)必要があります。
データ型の表示長
SESAM データ型は表示長ではなく、ある精度を有しています。
int(4)(意図された使用法:'9999'までの整数)の
代わりに、SESAM は単に31ビット長のintを要求
します。また、SESAMで利用可能な日付時刻型は次のものだけです。
DATE、 TIME(3)、
TIMESTAMP(3)
ベンダ固有のSQL型 unsigned、
zerofill、auto_increment
属性
unsigned と zerofill は
サポートされません。auto_increment は自動で
す。(SESAMに実装された自動インクリメントの利点を活かすために、
"... VALUES(0,...)" の代わりに
"INSERT ... VALUES(*, ...)" を使用して下さ
い。)
int ... DEFAULT '0000'
数値変数は、文字列定数で初期化するべきではありません。代わりに
DEFAULT 0 を使用して下さい。SQLデータ型
datetime の変数を初期化する際、初期化文字列には、次のように適
当な型キーワードを前に付加する必要があります。
CREATE TABLE exmpl (
xtime timestamp(3) DEFAULT TIMESTAMP '1970-01-01 00:00:00.000' NOT NULL
);
$count = xxxx_num_rows();
いくつかのデータベースは、返される値が著しく不正確であるとして
も、クエリ結果のレコード数を推定または見積もろうとします。
SESAM はクエリ結果のレコード数を実際に取得する前に知ることはあ
りません。その数が実際に必要な場合には、
SELECT COUNT(...) WHERE ... を試してみて下
さい。このクエリは、ヒット数を取得します。2番目のクエリは(理想
的には)結果を返します。
DROP TABLE thename;
SESAMでは、DROP TABLE においてテーブル名の
後にキーワード RESTRICT または
CASCADE のどちらかを後に付加する必要があり
ます。RESTRICT を指定した場合、(VIEWのよう
な)依存するオブジェクトがある場合にエラーが返されます。また、
CASCADE を指定した場合、依存するオブジェク
トは指定したテーブルから削除されます。
SESAM は現在BLOB型をサポートしていません。SESAMの将来のバージョン
は、BLOBをサポートする予定です。
PHP インターフェースでは、SQLフィールドを取得する際に次の型変換が
自動的に適用されます。
表 3. SQL から PHP への型変換
SQL 型 | PHP 型 |
---|
SMALLINT, INTEGER | "integer" |
NUMERIC, DECIMAL, FLOAT, REAL, DOUBLE | "double" |
DATE, TIME, TIMESTAMP | "string" |
VARCHAR, CHARACTER | "string" |
レコード全体を取得する際、結果は配列として返されます。空のフィー
ルドには値が入っていないため、個々のフィールド自体の存在を調べる
必要があります(空のフィールドかどうか調べるには、
isset() または
empty() を使
用して下さい) 。この手法は、(空のフィールドの表現として型の文字列
を使用するよりも)空のフィールドの見え方をユーザが制御することが可
能となります。
SESAM特有の"複数フィールド"機能により複数のフィールドの配列からな
るカラムを使用することが可能です。"複数フィールド"カラム亜は、次
のように作成可能です。
例 1. "複数フィールド"カラムを作成する CREATE TABLE multi_field_test (
pkey CHAR(20) PRIMARY KEY,
multi(3) CHAR(12)
) |
|
上のレコードに次のように代入することができます。
例 2. "複数フィールド"カラムに代入する INSERT INTO multi_field_test (pkey, multi(2..3) )
VALUES ('Second', <'first_val', 'second_val'>) |
|
(この場合のように)先頭の空のサブフィールドは無視され、代入された
値は詰められることに注意して下さい。このため、上記の例の結果は、
multi(2..3) ではなく、multi(1..2) となります。
結果レコードを取得する際、"複数カラム"は"インラインの"付加カラム
のようにアクセスされます。上のにおいて、"pkey" は添字0を有し、3つ
の"multi(1..3)" カラムは添字1から3でアクセス可能です。
SESAM固有の事項について詳細は、 または
を参照下さい。共にオンラインで参照可能です。もしくは、適
当なマニュアルを使用して下さい。