[PHP-users 19035]Re: PEARDBでOracle操作について
ISIGE, Akira
xia @ silvia.com
2003年 11月 20日 (木) 15:35:29 JST
いしげ です.
On 2003/11/20 14:56:57 JST,
masanori usui <usui.masanori @ jungleskill.com> wrote:
> > <?php
> > $db =& DB::connect( 'oci8://〜〜' );
> > $db->setOption( 'optimize', 'portability' );
> > ?>
これですが,書き忘れましたが,
この setOption() はマニュアルに載っていませんね.
将来,メソッド名の名前が変わったりしても,
非互換アナウンスがされないかもしれません.
# といっても他にマシな options 設定方法があるわけでもないし
> ちなみに、こういった情報ってどこからGETしてるんですかね〜〜
自分は,DB_DataObject が oci8 で動かなくて,
ソースを読んで調べました.
> ってやると$rowsにdb_error Objectが入ってしまうのですが、どなたかエラーの
> 原因がわかりますでしょうか?(ちなみに、これもPostgreSQLだと動きました)
DB/oci8.php を見ると,こんな風になってました.
> function fetchInto($result, &$arr, $fetchmode = DB_FETCHMODE_DEFAULT, $rownum=NULL)
> {
> if ($rownum !== NULL) {
> return $this->raiseError(DB_ERROR_NOT_CAPABLE);
> }
つまり oci8 では $rownum を指定するとタチドコロにエラー,と.
oci8.php の上記の部分を rownum エミュレートするコードに書き換えて
bugs.php.net あたりに投げる,ってのが正しい手順だと思いますが,
当面のところ,
(a) range(1, $from ) の間,空の fetchInto() を回してから,
rownum を指定しない fetchInto() でデータをフェッチするようにする.
あるいはメモリ大尽なら
(b) 面倒なので最初から getAll() しちゃって,
array_slice( $result, $from, ( $to - $from ) ) を取得する.
といった手段で手っ取り早く仕事を片付ける,という手もあります.
ちなみに,oci8.php を改造する時は,
/usr/local/lib/php/DB/oci8.php を改造するのではなく,
件のプロジェクトの include_dir にコピーしてきてそれを改造した方がよろしいかと.
--
ISIGE, Akira
PHP-users メーリングリストの案内