2

当您像这样运行查询时:

$query = "SELECT * FROM table";
$result = odbc_exec($dbh, $query);
while ($row = odbc_fetch_array($result)) {
    print_r($row);
}

$result 中存储的资源是否指向运行 php 的服务器上存在的数据?还是指向数据库中的数据?换句话说,正如 while 循环所做的那样,PHP 是每次迭代都与 DB 对话,还是从应用程序端的某个源中提取 $row?

这对我来说很重要的是我有一个使用 ODBC 和 PHP 通过 VPN 与之交谈的数据库。上周末发生了一些奇怪的事情,在 while 循环期间发生了巨大的停顿。因此在迭代之间,脚本将停止执行几秒钟到几分钟。发生这种情况似乎是完全随机的。我想知道是否需要在每次迭代时通过 VPN 与服务器通信,并且连接可能不稳定,或者我的 ODBC 驱动程序 (FreeTDS) 是否出现问题。

4

2 回答 2

2

mysql_query 和 odbc_exec 都返回一个资源,该资源(引用自php.net)“是一个特殊变量,持有对外部资源的引用。” 这表明服务器每次迭代都在与数据库服务器通信,但我不确定。

但是,我们在这里讨论的是 2 个连接。第一个是您与 PHP 服务器的连接,第二个是 PHP 服务器和数据库服务器之间的连接。如果两台服务器的连接速度都很快,那么您遇到的奇怪行为可能与您的 VPN 无关。

于 2009-12-23T20:40:58.483 回答
1

资源标识 PHP 用于与外部资源交互的内部数据结构。

对于 mysql_query() 返回的资源,这个数据结构将包含查询返回的行(直到所有数据都返回或连接失败才会返回)。然而,这种行为是特定于 MySQL 的——没有要求 DBMS 在客户端明确请求数据之前返回数据。

如果在您的设置中有一些奇怪的问题导致大量延迟,那么唯一明显的解决方案是在数据库端编译查询结果,然后将它们传送到您的 PHP 代码,无论是批处理还是作为一个整体(想想 web 服务) .

C。

于 2009-12-24T12:15:32.513 回答