【发布时间】:2010-08-26 14:00:31
【问题描述】:
我正在尝试在 PHP MySQLi(过程)和 MSSQL 库之上编写一个简单、精简且高效的数据库抽象层,以便像这样使用......
while ($a = db::go('db_name')->query('select * from foo')->row()) {
print_r($a);
}
我已经编写了课程,但在如何最好地循环结果方面有些挣扎。该类只需要处理选择查询,并且必须处理一些大型结果集。这是->row()方法的sn-p...
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 循环如何处理到达结果集的末尾?
【问题讨论】:
-
真的有必要滚动自己的访问层吗?见docs.php.net/pdo
-
遗憾的是,MS SQL Server 的 PDO 驱动程序仅处于实验阶段 (uk.php.net/manual/en/ref.pdo-dblib.php)。我需要更强大的东西。
-
还有另一个用于pdo的sql server驱动,见msdn.microsoft.com/en-us/library/cc296152%28SQL.90%29.aspx
-
我相信它只能在 Windows 平台上运行,我在 Ubuntu Server 9.10 上使用 PHP...
标签: php mysql sql-server mysqli fetch