3

我正在使用类似下面的 PHP 代码将查询中的所有数据放入数组中:

<?php

$results = array();

$q = odbc_exec("SELECT * FROM table");

while ($row = odbc_fetch_array($q)) {
    $results[] = $row;
}

?>

这很好用,但是当查询包含数千行时它会很慢。

我的问题是,在 PHP 中有什么方法可以将所有数据转储到一个数组中,而不必逐个循环遍历每条记录?

注意:数据库使用 MS SQL Server。

4

3 回答 3

1

您可以尝试使用 mssql 函数而不是 odbc,但这不太可能有很大的不同。

根据驱动程序的工作方式,结果集是结果数据本身的迭代器句柄。在某些情况下,直到 php 请求行时,php 才真正获取数据。除非驱动程序中有一个 fetch all 可用,否则循环遍历所有行通常是您唯一的选择。

如果您不需要所有列,则可以通过仅指定您实际需要的列来限制正在传输的数据。

于 2013-02-07T15:33:07.007 回答
1

指定cursor_typein odbc_connectmade odbc 获取更快。

$conn = odbc_connect($dsn, $user, $pass, SQL_CUR_USE_ODBC)

http://aaronsaray.com/blog/2007/08/02/odbc-for-udb-and-php-how-i-increased-performance-by-400/

于 2015-03-05T20:26:52.200 回答
0

我能够使用以下函数找到一种使用 ADOdb(PHP 的数据库抽象库)的GetAll()方法:

http://adodb.sourceforge.net/

$results = $DB->GetAll("SELECT * FROM table");

这会将所有行作为二维数组返回。

于 2013-02-11T21:11:18.273 回答