2

次のようなクエリを実行すると、次のようになります。

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

$ resultに保存されているリソースは、phpを実行しているサーバーに存在するデータを指していますか?または、データベース内のデータを指していますか?別の言い方をすれば、whileループはそれを行うので、PHPは反復ごとにDBと通信しているのでしょうか、それともアプリケーション側のソースからその$行をプルしているのでしょうか。

これが私にとって重要なのは、PHPでODBCを使用してVPN経由で話しているデータベースがあることです。この先週末、whileループ中に大きな一時停止が発生しているという奇妙なことが起こりました。したがって、反復の合間に、スクリプトは数秒から最大数分間実行を停止します。これが発生する場所は完全にランダムのようです。反復ごとにVPN経由でサーバーと通信する必要があるのか​​、接続が不安定なのか、またはODBCドライバー(FreeTDS)に問題が発生しているのか疑問に思っています。

4

2 に答える 2

2

mysql_queryとodbc_execはどちらも、(php.netからの引用)「外部リソースへの参照を保持する特別な変数である」リソースを返します。これは、サーバーが反復ごとにデータベースサーバーと通信していることを示していますが、よくわかりません。

ただし、ここで話している接続は2つあります。1つ目はPHPサーバーとの接続であり、2つ目はPHPサーバーとデータベースサーバー間の接続です。両方のサーバーの接続が高速である場合、発生している奇妙な動作はVPNとは何の関係もない可能性があります。

于 2009-12-23T20:40:58.483 に答える
1

リソースは、PHPが外部リソースと対話するために使用する内部データ構造を識別します。

mysql_query()によって返されるリソースの場合、このデータ構造にはクエリによって返される行が含まれます(すべてのデータが返されるか、接続が失敗するまで返されません)。ただし、この動作はMySQLに固有です。クライアントから明示的に要求される前に、DBMSがデータを返す必要はありません。

セットアップで多くの遅延を引き起こす奇妙な問題がある場合、唯一の明白な解決策は、データベース側でクエリの結果をコンパイルし、それらをバッチまたは全体としてPHPコードに配信することです(Webサービスを考えてください) 。

C。

于 2009-12-24T12:15:32.513 に答える