Pregunta

Cuando se ejecuta una consulta de este modo:

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

¿El recurso almacenado en $ resultado al punto de datos que existe en el servidor que ejecuta php? O está apuntando a los datos en la base de datos? Dicho de otra manera, como el bucle mientras hace su cosa, es PHP hablar con el PP cada iteración o está tirando $ fila que de alguna fuente en el lado de la aplicación?

Cuando esto está importando para mí es que tengo una base de datos que estoy hablando a través de VPN mediante ODBC con PHP. Este fin de semana pasado algo extraño ha sucedido donde enormes pausas están sucediendo durante el bucle while. Así que entre iteraciones, el script se detendrá la ejecución de segundo y hasta un minuto. Parece ser completamente al azar donde esto sucede. Me pregunto si necesito hablar con el servidor a través de VPN cada iteración y tal vez la conexión es escamosa o si algo ha ido mal con mi controlador ODBC (FreeTDS).

¿Fue útil?

Solución

mysql_query y odbc_exec tanto devuelven un recurso que (cita de php. neto) "es una variable especial, la celebración de una referencia a un recurso externo." Esto sugiere que el servidor está hablando con el servidor de base de datos cada iteración, no estoy seguro sin embargo.

Sin embargo, hay 2 conexiones de las que estamos hablando aquí. La primera es su conexión con el servidor de PHP, y la segunda es la conexión entre el servidor PHP y el servidor de base de datos. Si ambos servidores tienen una conexión rápida, el extraño comportamiento que está experimentando podría no tener nada que ver con la VPN.

Otros consejos

El recurso identifica la estructura de datos interno utilizado por PHP para interactuar con el recurso externo.

En el caso del recurso devuelto por mysql_query (), esta estructura de datos incluirá las filas devueltas por la consulta (y no regresará hasta que todos los datos han sido devueltos o no pasa la conenction). Sin embargo, este comportamiento es específico de MySQL - no existe el requisito de que el DBMS devuelven los datos antes de que sea expresamente solicitado por el cliente.

Si hay algún problema extraño causando una gran cantidad de latencia en su configuración, entonces la única solución obvia sería para compilar los resultados de la consulta en el lado de la base de datos y luego entregarlos a su código PHP, aither en lotes o en su conjunto ( pensar servicio web).

C.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top