用于MySQLi / MSSQL行获取的php DBAL

时间:2010-08-26 14:00:32

标签: php mysql sql-server mysqli fetch

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

1 个答案:

答案 0 :(得分:0)

忽略这一点,这是我很傻!我没有将结果资源设置为静态成员,因此在每次调用时都会重新检索它。道歉!