2009年11月12日

[PHP-users 34835] Re:PHP PEARでOracleにアクセスするにはどうすればいいでしょうか。

近藤です。

何とか接続できるようになりましたので報告します。

ただ、やったことが正しいことかわかりません。

行ったことは以下のような感じです。

tnsnames.oraを見直してもなかなかつながらない。
tnsnames.oraを変更すると、PHPでつながらないどころか
sqlplusでもつながらなくなる。

ということから、発想の転換をし、PEARのどこでエラーになっているのか?
という疑問になり、PEARのソースコードを参照。
/usr/share/pear/MDB2.phpから見ていき、/usr/share/pear/MDB2/Driver/oci8.php
を見ていくと、途中でusernameが書き換わっているところを発見。
とりあえず書き換わる部分をコメントアウトして書き換わらないようにしてみる。

function connect()の
$this->dsn['username'] =
$this->options['database_name_prefix'].$this->database_name;
の部分のコメントアウト

それでもつながらないのでさらに見ていくと

$sid = sprintf("(DESCRIPTION=(ADDRESS_LIST=(ADDRESS=(PROTOCOL=TCP)
(HOST=%s) (PORT=%s)))
(CONNECT_DATA=(SERVICE_NAME=%s)))",
という部分があり、「(CONNECT_DATA=(SERVICE_NAME=%s))」に着目。

tnsnamed.oraに(CONNECT_DATA=(SERVICE_NAME=SID)を足してみる・・・NG
tnsnamed.oraの(CONNECT_DATA=(SID=RMS3)を
      (CONNECT_DATA=(SERVICE_NAME=SID)に変更してみる・・・NG
tnsnamed.oraを元に戻し、oci8.phpの「(CONNECT_DATA=(SERVICE_NAME=%s)))",」
を「(CONNECT_DATA=(SID=%s)))",」に変更してみる・・・OK

エラーが出なかっただけで本当につながったのか確認するために、

Webのサンプルプログラムを参考に
while (($row = $res->fetchRow())) {
var_dump($row );
}
を追加して実行した結果、
データベースの内容が出てきました。

pearのソースを修正したわけですが、果たしてよかったでしょうか?

_______________________________________________
PHP-users mailing list PHP-users@xxxxx
http://ml.php.gr.jp/mailman/listinfo/php-users
PHP初心者のためのページ - 質問する前にはこちらをお読みください
http://oldwww.php.gr.jp/php/novice.php3


投稿者 xml-rpc : 2009年11月12日 13:26
役に立ちました?:
過去のフィードバック 平均:(0) 総合:(0) 投票回数:(0)
本記事へのTrackback: http://hoop.euqset.org/blog/mt-tb2006.cgi/90317
トラックバック
コメント
コメントする




画像の中に見える文字を入力してください。