Wann muss die vorbereitete Anweisung geschlossen werden?

Lesezeit: 2 Minuten

Benutzeravatar von Tarik
Tarik

Wann sollten vorbereitete Anweisungen in PHP geschlossen werden?

Beispiel:

    $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();

Sollte ich es benutzen $stmt->close(); Hier?

Bearbeiten:

Was im PHP-Handbuch geschrieben steht und auch ein Kommentar aus dem Handbuch sagt:

Schließt eine vorbereitete Anweisung. mysqli_stmt_close() hebt auch die Zuordnung des Statement-Handles auf. Wenn die aktuelle Anweisung ausstehende oder ungelesene Ergebnisse hat, bricht diese Funktion diese ab, damit die nächste Abfrage ausgeführt werden kann.

Kommentar:

wenn Sie eine Anweisung in einer Schleife mit bind_param und so weiter für eine größere Operation wiederholen. Ich dachte, es wäre gut, es mit stmt->close zu bereinigen. aber es brach immer mit einem Fehler nach ca. 250 Operationen . Da ich es mit stmt->reset versucht habe, hat es bei mir funktioniert.

  • Ich bin genauso neugierig … Beobachte diesen Thread!

    – Drewdin

    8. Juli 2011 um 23:05 Uhr

Das ist eine gute Verwendung von close, besonders da Sie eine weitere Abfrage planen. Sowohl bei PDO-Anweisungen als auch bei MySQLi-Anweisungen finde ich, dass es fast immer am besten ist, sich auf die Seite der Sauberkeit zu begeben – es entfernt potenzielle Fehler auf der ganzen Linie.

Was die Herren mit 250 Operationen betrifft … Ich sehe nicht, was der wirkliche Anwendungsfall ist. Warum muss er die Datenbank 250 Mal abfragen? Warum kann er die Datenbank nicht einmal mit 250 Datensätzen abfragen? Oder, was wahrscheinlicher ist, warum kann er die Datenbank nicht 25 Mal mit 10 Datensätzen abfragen?

  • Sagen Sie, dass es nur gut für die Sauberkeit ist? Weil ich das Problem habe, dass ich einen Fehler bekomme, wenn ich zwei Prepare-Anweisungen verwende, ohne die erste zu schließen (siehe stackoverflow.com/questions/37164371/…). Nicht wirklich sicher warum, weil ich nie gelesen habe, dass dies entscheidend ist

    – Adam

    12. Mai 2016 um 8:34 Uhr

Ich kann mich derzeit nicht äußern, daher gebe ich nur eine Antwort. Wenn Sie eine vorbereitete Anweisung ausführen, die die Datenbank nach einem Ergebnis abfragt, wird keine weitere Abfrage ausgeführt, es sei denn, Sie entfernen das aktuelle Ergebnis, das sie speichert. $result = $stmt->get_result(). Zweitens: Wenn Sie das Ergebnis der ersten Abfrage speichern müssen, damit Sie es später verwenden können, empfehle ich die Verwendung von zwei Ergebnismengen. Die erste speichert das Ergebnis der ersten Ausführung von $stmt und die zweite für die zweite Ausführung. Dies beantwortet die Frage möglicherweise nicht direkt, aber es kann jemandem helfen.

1444520cookie-checkWann muss die vorbereitete Anweisung geschlossen werden?

This website is using cookies to improve the user-friendliness. You agree by using the website further.

Privacy policy