Question

Lorsque vous exécutez une requête comme ceci:

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

La ressource stockée au point $ result aux données qui existe sur le serveur exécutant php? Ou pointe vers les données dans la base de données? Autrement dit, comme la boucle while fait c'est chose, est PHP parler à la DB chaque itération ou est-il en tirant cette ligne de $ provenant d'une source du côté de l'application?

Lorsque cela est mattering pour moi est que j'ai une base de données dont je parle à plus de VPN à l'aide ODBC avec PHP. Ce quelque chose week-end dernier étrange est arrivé où d'énormes pauses se produisent au cours de la boucle while. Donc, entre les itérations, le script arrête l'exécution pendant quelques secondes et jusqu'à minutes. Il semble être complètement aléatoire où cela se produit. Je me demande si je dois parler au serveur via VPN chaque itération et peut-être la connexion est squameuse ou si quelque chose va mal avec mon pilote ODBC (FreeTDS).

Était-ce utile?

La solution

mysql_query et les deux odbc_exec renvoient une ressource (citation de php. net ) « est une variable spéciale, la tenue d'une référence à une ressource externe. » Ceci suggère que le serveur parle avec le serveur de base de données chaque itération, je ne suis pas sûr cependant.

Cependant, il y a 2 connexions dont nous parlons ici. La première étant la connexion avec le serveur PHP, et le second étant la connexion entre le serveur PHP et le serveur de base de données. Si les deux serveurs ont une connexion rapide, le comportement étrange que vous rencontrez peut ne pas avoir rien à voir avec votre VPN.

Autres conseils

La ressource identifie la structure de données interne utilisé par PHP pour interagir avec la ressource externe.

Dans le cas de la ressource retournée par mysql_query (), cette structure de données comprendra les lignes renvoyées par la requête (et ne reviendra pas jusqu'à ce que toutes les données ont été retournées ou conenction échoue). Toutefois, ce comportement est spécifique à MySQL - il n'y a pas d'exigence que les SGBD renvoient les données avant qu'il ne soit explicitement demandée par le client.

S'il y a un problème étrange causant beaucoup de temps d'attente dans votre configuration, la seule solution évidente serait de compiler les résultats de la requête du côté de la base de données puis de les livrer à votre code PHP, aither en lot ou dans son ensemble ( penser webservice).

C.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top