1
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

IBMi DB2 for iにPHP(UBUNTU環境)から接続する。

Last updated at Posted at 2025-02-14

はじめに

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のページに進んでください。
image.png

(2)IBMにログインする

IDとPWを打ち込んでサインインしてください。もしアカウントがない場合はIBMidの作製からアカウントを作成してください。
image.png

(3)Zipファイルをダウンロードする

ACS Linux App PkgのDownloadを押し、zipファイルを落とします。
image.png

(4)debファイルをサーバー上に置きます。

zipを解凍すると、x86_64フォルダの中にibm-iaccess-1.1.0.28-1.0.amd64.debがあるかと思います(バージョンは変動します)。debファイルをUbuntuサーバーのお好きな場所に置きましょう。ホームディレクトリに置くのが楽です。
image.png

(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への変換を行う。

1
0
2

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?