(PHP 4 >= 4.3.0, PHP 5)
sybase_unbuffered_query — Sybase クエリを送信し、ブロックしない
sybase_unbuffered_query() は、指定したリンク ID に 関連付けられたサーバ上の現在アクティブなデータベースにクエリを送信します。 リンク ID が指定されていない場合は、直近にオープンされたリンクが 指定されたものと仮定します。リンクがオープンされていない場合は、 sybase_connect() がコールされた場合と同様の手順で リンクのオープンを試み、それを使用します。
sybase_query() とは異なり、 sybase_unbuffered_query() は結果セットの最初の 行のみを読み込みます。それ以降の行は、必要に応じて sybase_fetch_array() またはそれに類する関数で 読み込みます。sybase_data_seek() は指定した 行を読み込みます。この挙動により、大きな結果セットを扱う際に よりよいパフォーマンスを確保できます。
sybase_num_rows() が正確な行数を返すのは、結果セット 全体が読み込まれた場合のみです。Sybase は行数を知ることができず、 クライアントの実装によって行数を計算しています。
注意: 結果セットをすべて読み込む前に次のクエリを実行しようとした場合、 PHP は警告を発生し、未処理の結果をすべてキャンセルします。これを 避けるには、sybase_free_result() を使用します。 この関数は、バッファリングされていないクエリで未処理の結果を すべてキャンセルします。
結果セットをメモリ中に読み込む必要がないことを指示するため、 オプションの store_result に FALSE を 指定することが可能です。これによってメモリの使用量を抑えることができ、 大きな結果セットを扱う場合に有用です。
成功時に正の Sybase 結果 ID 、エラー時に FALSE を返します。
例1 sybase_unbuffered_query() の例
<?php
$dbh = sybase_connect('SYBASE', '', '');
$q = sybase_unbuffered_query('select firstname, lastname from huge_table', $dbh, false);
sybase_data_seek($q, 10000);
$i = 0;
while ($row = sybase_fetch_row($q)) {
echo $row[0], ' ', $row[1], '<br />';
if ($i++ > 40000) {
break;
}
}
sybase_free_result($q);
sybase_close($dbh);
?>
注意: この関数は、Sybase の CT ライブラリインターフェイスでのみ使用可能で、DB ライブラリでは使用できません。