Comments
Description
Transcript
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