はじめに
DB2のデータを使用したwebアプリ(マスタや発注データなどの検索、更新を行うアプリ)を作製した際の作業の備忘録です。
今回は接続までの手順です。
OSはubuntu22.04.3でありPHPのパッケージは
$ sudo apt update
$ sudo apt install -y php php-cli php-common php-dev php-gd php-imap php-json php-ldap php-mbstring php-mysql php-odbc php8.1-common php-pdo php-pear php-apcu php-soap php-xml php-xmlrpc
でインストールが完了していることを前提としています。
詳細は過去記事とほぼ同一環境なのでそちらをご参考ください。
#ODBCドライバーマネージャのインストールを行う
以下コマンドを実行してください。
$sudo apt update
$sudo apt install -y unixodbc unixodbc-dev
ODBCドライバの設定
(1)IBMi公式ページからODBCドライバーをダウンロード
こちらのリンクにアクセスし、Downloads for IBM i Access Client Solutionsのページに進んでください。
(2)IBMにログインする
IDとPWを打ち込んでサインインしてください。もしアカウントがない場合はIBMidの作製からアカウントを作成してください。
(3)Zipファイルをダウンロードする
ACS Linux App PkgのDownloadを押し、zipファイルを落とします。
(4)debファイルをサーバー上に置きます。
zipを解凍すると、x86_64フォルダの中にibm-iaccess-1.1.0.28-1.0.amd64.debがあるかと思います(バージョンは変動します)。debファイルをUbuntuサーバーのお好きな場所に置きましょう。ホームディレクトリに置くのが楽です。
(5)インストールします。
以下コマンドでODBCドライバーをインストールします。ホームディレクトリ以外にdebを置いている場合はその置いている場所に移動しましょう
$ sudo dpkg -i ibm-iaccess-1.1.0.28-1.0.amd64.deb
*場合によってはエラーが発生し$ sudo apt install -f
で依存関係の解決を行う必要があります。
正常にインストールできていれば/etc/odbcinst.iniに以下の記述が追加されているかと思います。
[IBM i Access ODBC Driver]
Description=IBM i Access for Linux ODBC Driver
Driver=/opt/ibm/iaccess/lib/libcwbodbc.so
Setup=/opt/ibm/iaccess/lib/libcwbodbcs.so
Driver64=/opt/ibm/iaccess/lib64/libcwbodbc.so
Setup64=/opt/ibm/iaccess/lib64/libcwbodbcs.so
Threading=0
DontDLClose=1
UsageCount=1
[IBM i Access ODBC Driver 64-bit]
Description=IBM i Access for Linux 64-bit ODBC Driver
Driver=/opt/ibm/iaccess/lib64/libcwbodbc.so
Setup=/opt/ibm/iaccess/lib64/libcwbodbcs.so
Threading=0
DontDLClose=1
UsageCount=1
(6)DSNを作成します。
# sudo vim /etc/odbc.ini
空のodbc.iniファイルの中身を↓↓みたいな感じで編集します。
[任意のDSNを設定]
Description = DSNについての説明。
Driver = IBM i Access ODBC Driver 64-bit
System = 接続先ホスト名 or IPアドレスを設定
UserID = 接続に使用するユーザーID
Password = 接続に使用するPW
Naming = 0
DefaultLibraries = QGPL
Database = 任意のライブラリ
ConnectionType = 0
CommitMode = 2
ExtendedDynamic = 0
DefaultPkgLibrary = QGPL
DefaultPackage = A/DEFAULT(IBM),2,0,1,0,512
AllowDataCompression = 1
LibraryView = 0
AllowUnsupportedChar = 0
ForceTranslation = 0
Trace = 0
CCSID = 943...接続に使用する文字コード。ここで943(SHIFT_JIS)を設定しないと、漢字・カナのデータが取り出せない。
CCSIDは忘れやすいポイントなのでご注意ください。
(6)接続の確認
以下のコマンドで、ODBCを用いた接続を行います。
$ isql [DSN]
connected!と表示されれば、接続成功です。
補足
HTMLでのデータの取り扱い。
・PHP等で、HTMLにデータ出力を行う際、SHIFT_JISのままだと文字化けが発生する。
そのため、あらかじめUTF-8に変換した上で出力する。
[PHPでの例]
文字列のエンコードをSHIFT_JISからUTF-8に変換
$string…変換する文字列
$string = mb_convert_encoding($string,'UTF-8','SJIS-win')
配列に格納された文字列のエンコードをSHIFT_JISからUTF-8に変換
$str_array...変換する文字列を含む配列
mb_convert_variables('UTF-8','SJIS-win',$str_array);
フォーム入力した文字列等をSQL文で使用する際は、逆にUTF-8からSHIFT_JISへの変換を行う。