[PHP-users 10503] Re: DBクラスのODBC の意味合いについて
Suguru Matsushita
php-users@php.gr.jp
Thu, 03 Oct 2002 15:38:48 +0900
松下@世田谷です。
ぬまじりさん、貴重な助言をありがとうございました。無事に解決しました。
メールを頂いてから、ひたすら
・DB.php
・DB/odbc.php
の内容を眺め、変数の変化を追っかけ、分岐チェックを追っかけしているうちに
「odbc.php」のバグらしき部分を発見しました。
-----odbc.php-----
$conn = @$connect_function ( $dbhost, $user, $pw ) ;
-----
という部分があるのですが、
# ごめんなさい、あろうことかオリジナルに直接手を加えたので、正確な行数は
# 不明です。今のバージョンでは直ってるかも知れません。・・・ああ・・・。
-----
$conn = @$connect_function ( $dbhost, $user, $pw ) ;
-----・・・ではなく、
↓
-----
$conn = @$connect_function ( $database, $user, $pw ) ;
-----
が正しいのでした。
しかも、$database 変数を準備していないようですので、
-----
$database = $dsninfo['database'] ;
-----
としてあげなくてはなりません。
つまり修正点としては、
----- odbc.php -----
if ($this->provides('pconnect')) {
$connect_function = $persistent ? 'odbc_pconnect' : 'odbc_connect';
} else {
$connect_function = 'odbc_connect';
}
$conn = @$connect_function($dbhost, $user, $pw);
$conn = @$connect_function( $dbhost, $user, $pw );
if (!is_resource($conn)) {
return $this->raiseError(DB_ERROR_CONNECT_FAILED, null, null,
null, $this->errorNative());
}
----- ↓このように変えます -----
if ($this->provides('pconnect')) {
$connect_function = $persistent ? 'odbc_pconnect' : 'odbc_connect';
} else {
$connect_function = 'odbc_connect';
}
$database = $dsninfo['database'] ;
$conn = @$connect_function($database, $user, $pw);
if (!is_resource($conn)) {
return $this->raiseError(DB_ERROR_CONNECT_FAILED, null, null,
null, $this->errorNative());
}
-----
これでちゃんと接続されるようになりました。・・・ひどいよお。
# トレースの途中でエラーメッセージが
# 「接続に失敗しました」
# から
# 「そのようなデータベースはありません」
# と、エラーメッセージもまっとうになっていったのはなぜでしょうか?(^^;
絶対に DB2 が動くはずだと確信させていただいたのは、ぬまじりさんの適切な
助言のお陰です。本当にありがとうございました。
これで少しでも DB クラスで ODBC を利用する方々のお役に立てればと思います。
> ODBC関数を使い慣れているなら、DB.phpにあるDBクラスのconnect()辺りから
> 追っていけば原因が分かるのではないかと。
本当に助かりました。
なぜか、元のソースは間違っている上に
-----
$conn = @$connect_function($dbhost, $user, $pw);
$conn = @$connect_function( $dbhost, $user, $pw );
-----
と微妙に違う二行が重複していたりします。
作っている途中で夕飯にでも呼ばれたんでしょうか? (^^;
結論として「DB クラスの ODBC は、関数の ODBC で動くなら利用可能です。」
ご厚意にお応えして、きっちりと結論を出した上での返事を出したかったため、
少し返事が遅れてしまったこと、お詫びいたします。
--
<staff_matsushita@ewoman.co.jp>