我正在使用类似以下PHP代码的内容将查询中的所有数据放入数组中:
<?php
$results = array();
$q = odbc_exec("SELECT * FROM table");
while ($row = odbc_fetch_array($q)) {
$results[] = $row;
}
?>
这样可以正常工作,但当查询包含数千行时,它会非常慢。
我的问题是,PHP中是否有任何方法可以将所有数据转储到数组中,而无需逐个遍历每个记录?
注意:将MS SQL Server用于数据库。
答案 0 :(得分:1)
您可以尝试使用mssql函数而不是odbc,但它不太可能产生很大的差异。
使用驱动程序的工作方式,结果集是结果数据本身的迭代器句柄。在某些情况下,php实际上不会获取数据,直到php请求该行。除非驱动程序中有所有可用的提取,否则循环遍历所有行通常是您唯一的选择。
如果您不需要所有列,则可以通过仅指定实际需要的列来限制传输的数据。
答案 1 :(得分:1)
指定cursor_type
中的odbc_connect
使得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/
答案 2 :(得分:0)
我能够使用GetAll()
函数找到使用ADOdb(PHP的数据库抽象库)执行此操作的方法:
$ results = $ DB-&gt; GetAll(“SELECT * FROM table”);
这会将所有行作为二维数组返回。