$stmt->close() vs $stmt->free_result()
Je suis en train d'essayer de clarifier la différence entre $stmt->close() et $stmt->free_result() lors de la finalisation d'un prêt mysqli déclaration.
Jusqu'à présent j'utilise:
$mysqli = new mysqli(host,user,password,database);
$stmt = $mysqli->prepare(sql statement);
[...]
$stmt->free_result();
$mysqli->close();
et tout semble bien fonctionner.
Mais j'ai vu beaucoup de programmeurs utilisent $stmt->fermer au lieu de $stmt->free_result(). Et une fois que j'ai vu les deux d'entre eux:
$stmt->free_result();
$stmt->close();
$mysqli->close();
Alors, que dois-je choisir, dans quelles circonstances et pourquoi?
OriginalL'auteur Nicholaos Renessis | 2013-10-23
Vous devez vous connecter pour publier un commentaire.
$stmt->free_result()
libère de la mémoire liée à un ensemble de résultats, alors que$stmt->close()
libère de la mémoire liés à une déclaration préparée. Par la suite appeler$stmt->close()
d'annuler n'importe quel résultat.En essence, en appelant
$stmt->close()
donnera le même effet que l'appel à la$stmt->free_result()
car il annule le jeu de résultats. Mais l'appel de$stmt->free_result()
ne sera pas effacer la mémoire utilisée par l'instruction préparée dans ce cas, vous devez utiliser$stmt->close()
.Autant que celui à utiliser va - il peut y avoir des situations où vous avez l'intention sur l'utilisation de l'instruction préparée vous avez initialisé, mais qui ne sont plus dans le besoin de l'ensemble de résultats que vous avez actuellement. Dans ce cas, vous attendra à l'appeler
$stmt->close()
jusqu'à ce que vous avez terminé avec la déclaration préparée à l'avance, et au lieu d'appeler$stmt->free_result()
avant d'exécuter une autre instruction.OriginalL'auteur
PHP mettra fin à la connexion et de la gratuit de la ressource après la fin de l'exécution;
mysqli::close Ferme une déclaration préparée.
Puisque le nombre de connexions totales disponibles est limité, en libérant des ressources à la seconde où vous avez terminé avec elle, c'est une bonne pratique.
Et
mysqli_stmt::free_result Libère résultat stocké en mémoire pour le descripteur d'instruction.
c'est une bonne pratique pour libérer explicitement la ressource lorsque vous n'avez pas besoin de plus. il est possible d'éviter de faire une lourde charge sur le serveur lorsque plusieurs demandes sont faites en même temps.
Les deux ne sont pas jamais strictement nécessaire à invoquer, et c'est une bonne pratique de l'utilisation des deux.
OriginalL'auteur