[PHP-users 33859] oci_connect()の2回目以降の接続ハンドル

eijun eijun @ hal.ne.jp
2008年 7月 17日 (木) 13:19:04 JST


北村と申します。

よろしくお願いします。

OCI8関数のoci_connect()をループの中で使用しています。

(実験コード)
<?php
     for ($i=0;$i<10;$i++){
          $conn = oci_connect("scott", "tiger", "hogehoge");
          echo $i+1 . "つ目 " . $conn . "<br />";
     }
?>

マニュアルを見ると
http://www.phpmanual.jp/function.oci-connect.html

----引用はじまり----
注意:  同じパラメータを使用して 2 回目やそれ以降に oci_connect() がコー
ルされた場合、 最初のコールで返された接続ハンドルを返します。 これは 1
つのハンドルに対して発行されたクエリは、 他のハンドルにも適用されること
を意味します。
----引用ここまで----

となっています。

マニュアル通りだと$connにはループを何回しても'同じリソースID'がセットさ
れるように思うのですが、ブラウザで見ると

1つ目 Resource id #3
2つ目 Resource id #5
3つ目 Resource id #7
4つ目 Resource id #9
5つ目 Resource id #11
6つ目 Resource id #13
7つ目 Resource id #15
8つ目 Resource id #17
9つ目 Resource id #19
10つ目 Resource id #21

と毎回異なるリソースIDが出力されています。
#10つ目という表現はお愛嬌

実際に運用しているスクリプトでは、ループの途中で以下のような警告が出ます。

PHP Warning:  oci_connect(): OCISessionBegin: ORA-00604: error occurred
at recursive SQL level 1
ORA-00018: maximum number of sessions exceeded in /home/hoge/db.php on
line 25

私のマニュアルの解釈が間違っているのでしょうか。
それともoci_connect()関数の挙動がマニュアルと違うのでしょうか。

何かご存知の方は情報をお願いいたします。




PHP-users メーリングリストの案内