このように使用するために、PHP MySQLi (手続き型) および MSSQL ライブラリの上に、シンプルで薄くて効率的なデータベース抽象化レイヤーを作成しようとしています...
while ($a = db::go('db_name')->query('select * from foo')->row()) {
print_r($a);
}
クラスを作成しましたが、結果をループする最善の方法に多少苦労しています。クラスは選択クエリを処理するだけでよく、いくつかの大きな結果セットを処理する必要があります。ここにメソッドのスニペットがあり->row()
ます...
public function row() {
return $this->{'get'.ucwords($this->details['type']).'Row'}();
}
private function getMysqliRow() {
return @mysqli_fetch_assoc($this->result);
}
private function getMssqlRow() {
return @mssql_fetch_assoc($this->result);
}
現時点では、呼び出しによって無限ループが発生し、結果セットの内部ポインターが呼び出しと同じようにインクリメントされないため、毎回同じ行が取得されますwhile ($a = mssql_data_seek($result))
。これは完全に理にかなっています (結果セットはグローバルではありません。一度に複数の結果セットを処理できるはずです!)。
それで、これを回避するエレガントで効率的な方法を知っている人はいますか? または、データ シーク関数 ( mysqli_data_seek()およびmssql_data_seek() ) を使用し、結果セット内の現在の位置へのポインターを保持する唯一のソリューションですか? もしそうなら、これはどのくらい効率的ですか (私は 250000 を超える大きな結果セットを処理します)? また、while ループは結果セットの最後に到達するのをどのように処理するのでしょうか?