使用PHP快速将SQL查询中的所有数据放入数组中

使用PHP快速将SQL查询中的所有数据放入数组中,php,sql-server,arrays,Php,Sql Server,Arrays,我使用以下PHP代码将查询中的所有数据放入数组: <?php $results = array(); $q = odbc_exec("SELECT * FROM table"); while ($row = odbc_fetch_array($q)) { $results[] = $row; } ?> 这很好,但当查询包含数千行时,速度非常慢 我的问题是,在PHP中是否有任何方法可以将所有数据转储到一个数组中,而不必逐个循环遍历每条记录 注意:对数据库使用MS

我使用以下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才真正获取数据。除非驱动程序中有fetchall可用,否则循环所有行通常是您唯一的选择


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

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

$results=$DB->GetAll(“从表中选择*)


这将以二维数组的形式返回所有行。

odbc\u connect
中指定
cursor\u类型
,使得odbc获取更快

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

当您需要读取大量数据时,总是需要一些时间。你真的需要那张桌子的一排吗?你想做什么?如果不需要进一步依赖数组,你可以在
while
循环本身内部进行操作。我希望有一个函数可以在不使用while循环的情况下将整个查询内容放入数组中。根据他们的网站…安装ADOdb C扩展将加快GetAll()和GetArray()的速度100%()。如果不使用C扩展,它似乎比标准PHP代码稍微快一点。可能是即使使用扩展,您也不会注意到太多的差异。不知道我很想知道是否有任何明显的好处——我有点怀疑是否会有。