我正在尝试在 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 循环如何处理到达结果集的末尾?