我正在尝试在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循环如何处理到达结果集的末尾?
答案 0 :(得分:0)
忽略这一点,这是我很傻!我没有将结果资源设置为静态成员,因此在每次调用时都会重新检索它。道歉!