2011-07-08 20 views
18

Cuándo cerrar las declaraciones preparadas en PHP?Cuándo cerrar la declaración preparada

Ejemplo:

$query = "insert into web_reviews (title,added_date,reviewer_home_url,read_more_link,summary) values(?,?,?,?,?)"; 
    $stmt = $this->db->prepare($query); 
    $stmt->bind_params($this->title,$this->added_date,$this->reviewer_home_url,$this->read_more,$this->summary); 
    $stmt->execute() or die("Cannot add the date to the database, please try again."); 
    $stmt->close(); 

    $stmt = $this->db->prepare("select id from web_reviews where title = ? and read_more = ?"); 
    $stmt->bind_params($this->title,$this->read_more); 
    $stmt->execute(); 
    $stmt->bind_results($web_review_id); 
    $stmt->close(); 

¿Debo usar $stmt->close(); aquí?

Editar:

¿Qué está escrito en el Manual de PHP y también uno de los comentarios del manual dice:

cierra una declaración preparada. mysqli_stmt_close() también desasigna el descriptor de contexto. Si la corriente declaración tiene pendientes o no leídos resultados, esta función les cancela por lo que la siguiente consulta puede ser ejecutada.

Comentario:

si usted está repitiendo una declaración en un bucle usando bind_param y así sucesivamente en su interior para una operación más grande. yo creo que sería bueno limpiarlo con stmt-> cerrar. pero se rompió siempre con un error después de aprox. 250 operaciones. Como lo intenté con stmt-> reset funcionó para mí.

+0

Im curioso lo mismo ... Viendo este hilo! – Drewdin

Respuesta

7

Ese es un buen uso de cerrar, especialmente porque está planeando hacer otra consulta. Con las declaraciones de PDO y las declaraciones de MySQLi, encuentro que equivocarse del lado de la limpieza casi siempre es lo mejor: elimina posibles errores en el futuro.

En cuanto a los caballeros con 250 operaciones ... no veo lo que el caso de uso real. ¿Por qué necesita consultar la base de datos 250 veces diferentes? ¿Por qué no puede consultar la base de datos una vez con 250 registros? O, más probablemente, ¿por qué no puede consultar la base de datos 25 veces con 10 registros?

+0

¿Dices que solo sirve para la limpieza? Porque tengo el problema de que cuando uso dos declaraciones de preparación sin cerrar la primera, aparece un error (Consulte http://stackoverflow.com/questions/37164371/php-prepare-method-not-working-when-calling-it -dos veces). No estoy seguro de por qué, porque nunca he leído que esto es crucial – Adam

Cuestiones relacionadas