我使用以下PHP代码将查询中的所有数据放入数组:
<?php
$results = array();
$q = odbc_exec("SELECT * FROM table");
while ($row = odbc_fetch_array($q)) {
$results[] = $row;
}
?>
这很好,但当查询包含数千行时,速度非常慢。
我的问题是,在PHP中有没有任何方法可以将所有数据转储到一个数组中,而不必逐个循环遍历每个记录?
注意:使用MS SQL Server作为数据库。
您可以尝试使用mssql函数而不是odbc,但这不太可能产生很大的影响。
根据驱动程序的工作方式,结果集是结果数据本身的迭代器句柄。在某些情况下,直到php请求该行,php才真正获得数据。除非驱动程序中有一个fetch-all可用,否则遍历所有行通常是您唯一的选择。
如果不需要所有的列,可以通过只指定实际需要的列来限制传输的数据。
在odbc_connect
中指定cursor_type
使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/
我能够使用GetAll()
函数找到一种使用ADOdb(PHP的数据库抽象库)实现这一点的方法:
http://adodb.sourceforge.net/
$results=$DB->GetAll("SELECT*FROM table");
这将以二维数组的形式返回所有行。