- PR -

LINUX ODBCの設定とPHPコネクション

1
投稿者投稿内容
きのこ
ぬし
会議室デビュー日: 2004/09/01
投稿数: 256
投稿日時: 2006-02-07 12:34
http://www-03.ibm.com/servers/eserver/iseries/access/
http://www-03.ibm.com/servers/eserver/iseries/access/linux/guide/
を参考に別マシンのDB2 V5.1 (AS400)
にODBC接続しようとしてます

まずインストールしたら
/etc/odbcinst.iniに

[iSeries Access ODBC Driver]
Description = iSeries Access for Linux ODBC Driver
Driver = /opt/ibm/iSeriesAccess/lib/libcwbodbc.so
Setup = /opt/ibm/iSeriesAccess/lib/libcwbodbcs.so
Threading = 2
DontDLClose = 1
UsageCount = 1

というエントリーが追加されました

PHP(Version5)で

$conn_string =
"DRIVER={iSeries Access ODBC Driver};DATABASE=$database;" .
"HOSTNAME=$hostname;PORT=$port;PROTOCOL=TCPIP;UID=$user;PWD=$password;";
$conn = odbc_connect($conn_string, '', '');

if ($conn) {
echo "Connection succeeded.";
odbc_close($conn);
}
else {
echo "Connection failed.";
}

でやっってますが・・・
エラーで

Warning: odbc_connect()
[function.odbc-connect]:
SQL error:
[unixODBC][IBM][iSeries Access ODBC Driver]
Missing system name needed for connection.,
SQL state S1000 in SQLConnect
in /var/www/html/ibm.php on line 10
Connection failed.

となります

odbcinst -j
だと
unixODBC 2.2.11
DRIVERS............: /etc/odbcinst.ini
SYSTEM DATA SOURCES: /etc/odbc.ini
USER DATA SOURCES..: /root/.odbc.ini

ですが
/etc/odbc.ini
はなにもはいってません。

そこで
odbc.iniを
[AS400Master]
Description = AS400 Master File
Driver = iSeries Access ODBC Driver
Database = TEST
Server = 192.168.1.20
Port = 449

として
$conn = odbc_connect("AS400Master","USER","PASSWD");
としても同じエラーがでています
見る限りドライバーは認識しているようなのですが・・・
なぜかデータソースがみえんといっているようです

この手のエラーはなにが原因なのでしょうか?
"SQL state S1000 in SQLConnect "
で検索すると
結構他のDBでもにたようなエラーをうけて相談している人がいるようですが
なかなか約にたつサイトがありません
(なぜかロシア語やドイツ語のサイトがころころひっかかってきます)

なにかためせることがあればどうかご教授いただけたら幸いです
dodo
ベテラン
会議室デビュー日: 2004/05/12
投稿数: 99
お住まい・勤務地: 東京都渋谷区
投稿日時: 2006-02-07 17:25
CWBPingは通りますか?

参考
http://www.e-bellnet.com/special/vision/vision_0405.html
きのこ
ぬし
会議室デビュー日: 2004/09/01
投稿数: 256
投稿日時: 2006-02-08 15:35
DoDoさん

貴重な情報ありがとうございます
CWBPingはためしていませんでした
(いろんなものをぐちゃぐちゃにいれすぎて、きれいにするために
すでに再度いれなおしました)

ただ付属のrmtodbc をつかったら以下のエラーがでたので
PHPとの相性による原因ではなさそうです
=====================================
/opt/ibm/iSeriesAccess/bin/rmtodbc
"select * from MYTABLE"
/DSN:AS400Master /USER:USER /PASSWORD:PASSWORD

IBM iSeries Access for Linux
Version 5 Release 2 Level 0
Remote Command via ODBC utility V1.2
(C) Copyright IBM Corporation and Others 1984, 2003. All rights reserved.
U.S. Government Users Restricted Rights - Use, duplication or disclosure
restricted by GSA ADP Schedule Contract with IBM Corp.
Licensed Materials - Property of IBM

ERROR SQLDriverConnect
Dialog failed.
====================================

dodoさんの紹介の記事によると、
ソースからやらないといけないようですね

PHP付属のRPMでなんでもワンタッチでやっていた私には
ちょっと複雑そうです

疑問なのは
UNIXODBCをいれたあとに
ODBCINST.INIでDBドライバーと関連
づけさせるのでしょうが、これは普通
DBをインストールするときにやってくれるのでしょうか?
(DBをインストールしたときにどれがドライバでそれがどこに
インストールされそれをどのようにODBCINSTに関連づけるかがIBMのDBでは
バージョンとの整合性も含めた情報がすこしすくない、あるいはまとまっていないのでやっかいです、(IBMのDB2では・・)

とりあえず帰ったらさっそくためします
ありがとうございました。
1

スキルアップ/キャリアアップ(JOB@IT)