Sollten PDO-vorbereitete Aussagen nach der Verwendung freigegeben werden? Und wenn ja, wie? Ich frage speziell nach MySQL - wie können Sie und sollten Sie DEALLOCATE PREPARE
nennen? obwohl PDO. (Edit: Zur Verdeutlichung bezieht sich diese Frage nicht auf emulierte Prepares, sondern bereitet sie wirklich vor.)
Auch - wird dies die Ergebnisse freisetzen (wenn groß)?
Erläuterung:
Ich habe Code in den Zeilen von
gesehen %Vor% was mich dazu gebracht hat, mich zu fragen, was das bedeutet, wann und ob unset($stmnt);
anders wäre?
Das Handbuch zeigt dies an
Wenn die Abfrage vorbereitet ist, wird die Datenbank analysieren, kompilieren und Optimieren Sie seinen Plan zum Ausführen der Abfrage. [...] Mit einem vorbereiteten Anweisung die Anwendung vermeidet die Wiederholung der Zyklus analysieren / kompilieren / optimieren.
was darauf hindeutet, dass Sie die Anweisung nicht zuordnen sollten, und MySQL hat die Fähigkeit. Also,
DEALLOCATE PREPARE
und wie Der Vollständigkeit halber SO Frage bezieht sich auf "free_result" und "close" Funktionen für mysqli_()
legen nahe, dass das Freigeben der Anweisung tatsächlich Zeit hinzufügt (es sei denn, Sie haben eine große Speicherbelegung und benötigen Speicherplatz). "Free_result" unterscheidet sich jedoch davon, den SQL-Server davon zu befreien, die vorbereitete Anweisung zwischenzuspeichern.
Sollten PDO-vorbereitete Aussagen nach der Verwendung freigegeben werden? Und wenn ja, wie?
Im Zusammenhang mit MySQL? Nein. Warum?
PDO emuliert standardmäßig vorbereitete Anweisungen . Dies bedeutet, dass PDO selbst die Parameterersetzung, das Escaping usw. ausführt und Teile von SQL in die Zeile sendet, anstatt native vorbereitete Anweisungen zu verwenden.
Während Sie es einschalten können, müssen Sie nicht ausdrücklich den Handle schließen, es sei denn verwenden Sie auch ungepufferte Abfragen . Lässt man die Anweisung nur außerhalb des Gültigkeitsbereichs oder auf null setzen, schließt nicht den Cursor. Auch hier ist nur von Bedeutung, wenn Sie ungepufferte Abfragen verwenden. Wenn dies nicht der Fall ist, reicht es aus, den Gültigkeitsbereich zu verlassen oder auf null zu setzen, um den Anfasser sauber zu schließen.
Sie haben auch eine Verknüpfung mit DEALLOCATE PREPARE
hergestellt. Diese Syntax wird nur benötigt, wenn manuell aufgerufen wird PREPARE
mit einer SQL-Zeichenfolge. Dies ist eine vollständig und völlig separate Aktion als MySQL C- Level-API-basierte vorbereitete Anweisungen , was PDO_MYSQL
verwendet. (Okay, vielleicht verwenden Sie mysqlnd
, aber es ist im Grunde dasselbe.)
Ja. Wenn Sie die Prepare-Anweisung abgeschlossen haben, können Sie sie auf NULL
oder unset()
setzen.
Für ein Skript mit mehreren Abfragen und großen Datenbanken ist dies von Bedeutung. Sie können testen mit:
%Vor%Für mich hat das 20 MB Speicherplatz gespart, was das Skript später zum Absturz brachte.
Tags und Links php mysql prepared-statement pdo