2012-01-25 10 views
5

¿Cuál es la importancia de utilizar:PHP ::: ::: preparado estados freeresult() ::: close()

$stmt->free_result(); 
$stmt->close(); 

Después de una llamada base de datos utilizando statments preparados de esta manera:

$mysqli=new mysqli("database", "db", "pass", "user"); 

$stmt = $mysqli->prepare("SELECT email FROM users WHERE id=? "); 
$stmt->bind_param('i',$_SESSION['id']); 
$stmt->execute(); 
$stmt->bind_result($email); 
while($stmt->fetch()){ 
    echo $email; 
} 
$stmt->free_result(); //why do i need this? 
$stmt->close();  //why do i need this? 

Im preguntando porque no veo ninguna degradación de rendimiento notable sin ellos. Son aquellos comandos por lo general sólo se utilizan para cuando almaceno el resultado usando:

$stmt->store_result(); 

De esta manera:

$mysqli=new mysqli("database", "db", "pass", "user"); 

$stmt = $mysqli->prepare("SELECT email FROM users WHERE id=? "); 
$stmt->bind_param('i',$_SESSION['id']); 
$stmt->execute(); 
$stmt->store_result(); 
$stmt->bind_result($email); 
while($stmt->fetch()){ 
    echo $email; 
} 
$stmt->free_result(); //why do i need this? 
$stmt->close();  //why do i need this? 

última instancia, la cuestión se reduce a cuando es el momento adecuado para usar freeresult() y close ()?

Respuesta

1

La instrucción free_results le dice al motor de base de datos que puede liberar el conjunto de resultados.

Al ejecutar su resumen, se crea un iterador. El cliente (su aplicación) repite cada resultado descargándolos uno por uno o en partes.

Esto le permite iterar millones de registros sin descargar todos los resultados en un solo fragmento.

EDITAR

resultado Libre va a liberar memoria en el lado del cliente. Útil si un solo registro es muy grande y la memoria necesita ser liberada.

Ver: http://php.net/manual/en/function.mysql-free-result.php

+1

No, no le dice nada a la base de datos – zerkms

+0

Así que puedo utilizar freeresult() al final de cualquier declaración que no necesito a storeresult() para? –

+1

@Dan Kanze: siempre y cuando no experimente ningún problema, no lo haga, no pierda ciclos de CPU por nada – zerkms

Cuestiones relacionadas