DB2への接続

DB2への接続
初めに、IBM i のDB2への接続方法を実習しま
す。
接続の種類
 DB2関数
 情報入手しやすく、お勧めです。
 ODBC関数
 接続時のオプション指定などができません
が、DB2も扱えます。
 i5関数
 DB2関数をラッパしたファイル操作関数があ
ります。RPGでのSETLLやREAD命令に似
た使い方や、オブジェクト操作向き。
# 12
DB2接続フロー
 db2_connectで接続開始
 db2_prepareでSQL文準備
 任意でdb2_bind_paramで引数指定
 db2_executeで実行
 db2_fetch_* で結果取り出し
 最後にdb2_close
 途中でエラーで終了する場合も
# 13
DB2への接続
 db2_connectを利用
 第1引数はリレーショナル・データベース
名。DSPRDBDIREで確認。
*LOCALも使えます。
 第2、第3引数にそれぞれ IBM i へのログイ
ンユーザーおよびパスワード。
# 14
DB2への接続
 第4引数は任意で指定。例えば。。
 i5_lib
SQL文でライブラリを省略した場合の、
既定ライブラリを指定
 autocommit, i5_commit
トランザクション制御方法を指定
詳しくは「発展」をご覧下さい
# 15
DB2への接続例
 db2_connect( '*LOCAL', $userId, $pwd );
 db2_connect( 'S123456A', $userId, $pwd, array('i5_lib' => 'ZPHP99') );
# 16
接続が失敗・成功したとき
 db2_connectが falseを返すことを利用して
判断
 db2_conn_errormsg で接続エラーメッセー
ジを取得できます。
 ちなみに、後で使う db2_stmt_errormsg は
SQL文(ステートメント)のエラーを返します。
 接続に成功した場合は、使い終わったら
db2_close で閉じましょう。
# 17
SQLの準備と実行
 db2_prepare及びdb2_executeを利用
 SQL文の可変部分を?で指定可能。セキュ
リティーを強くできます。
 ?部分を db2_bind_param で指定。
?1個につきdb2_bind_param1個必要です
が、その代わり桁精度など細かく指定できま
す。
 または簡易的に db2_execute の第2引数
で配列として指定。
# 18
SQL結果取り出し
 db2_fetch_* を利用
 * の部分は、array, assoc, both の3種類
です。
rowもありますが、IBM i では非推奨
 array では SQL文での項目記述順で0番か
ら始まる配列、assoc では項目名をキーに
する連想配列を返します。
bothは両方のデータを含む連想配列を返
します
# 19
SQL結果取り出しイメージ
 db2_fetch_array
 $row[0] = 'A001', $row[1] = '吉田'
 db2_fetch_assoc
 [0]の代わりに['CODE'], [1]の代わりに
['NAME']がキーの連想配列
 db2_fetch_both
 [0]と['CODE']、[1]と['NAME']の両方を
キーとして含む連想配列
# 20
実習
 対象のPHPスクリプト
 /www/zendcore/htdocs/zphpNN の
db01.php 及び db01.inc.php
 得意先マスターTOKUIMのデータを
UPDDTAで追加・変更したり、
 db01.inc.php 33行目の$minTokuiCdや
その次の$maxTokuiCdを変更して、検索
結果に反映されることを確認しましょう
# 21
実習で接続が不調の場合
 どのような結果が表示されるか、確認できるよ
うに、DB2に接続したフリをするファイルを
用意しました。
 もし万が一不調の場合、db01.inc.phpを呼び
出す箇所をdb99.inc.php に書き換えてくださ
い。
 ラッパ関数 my_db2_fetch_array でレコー
ドを取得したフリをします。
# 22