/ / Mysqli_result disponibilidad - php, mysql, mysqli

Disponibilidad de Mysqli_result - php, mysql, mysqli

¿Todavía puedes usar un mysqli_result objeto después de que haya cerrado el mysqli conexión que lo produjo? Por ejemplo, estoy creando un objeto PHP con un método que abre una conexión mysqli, realiza una consulta, almacena el resultado en un parámetro y luego cierra la conexión. ¿Funcionará esto o debería hacerlo? fetch_all() El resultado en una matriz y luego cerrar la conexión?

No puedo encontrar nada en la documentación o en otro lugar en línea que responda a esta pregunta. Tal vez sea porque es obvio para todos los demás, pero no lo es para mí.

Respuestas

1 para la respuesta № 1

Sí. Por defecto, mysqli ejecuta consultas con la opción. MYSQLI_STORE_RESULT, lo que significa que copia el conjunto de resultados alcliente (en la memoria del controlador PHP). Por lo tanto, cuando "recuperas" un resultado de mysqli, simplemente estás haciendo un bucle sobre el conjunto de resultados que ya se ha obtenido por completo del servidor MySQL. Y si cierras la conexión, el controlador conserva esos datos.

Aquí hay un ejemplo de código rápido para demostrar:

$con = new mysqli(...);

sleep(10);
/* go run SHOW PROCESSLIST in a MySQL shell to see the connection */

$sql = "SELECT SLEEP(10) FROM test.foo ";
$result = $con->query($sql);
/* observe the query running in SHOW PROCESSLIST */

$con->close();

sleep(10);
/* now go look at SHOW PROCESSLIST to verify the connection is gone */

print_r($result->fetch_all());
/* Hey! I got the data anyway */