Когда закрывать Подготовленное заявление - PullRequest
21 голосов
/ 09 июля 2011

Когда закрывать подготовленные операторы в PHP?

Пример:

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

Должен ли я использовать $stmt->close(); здесь?

Редактировать:

То, что написано в руководстве по PHP, а также один комментарий из руководства гласит:

Закрывает подготовленное утверждение.mysqli_stmt_close () также освобождает дескриптор оператора.Если текущий оператор имеет ожидающие или непрочитанные результаты, эта функция отменяет их, чтобы можно было выполнить следующий запрос.

Комментарий:

, если вы повторяете оператор вцикл, использующий bind_param и так далее внутри него для более крупной операции.я думаю, было бы хорошо, чтобы очистить его с помощью stmt-> close.но он всегда ломался с ошибкой после aprox.250 операций.Когда я попробовал его с помощью stmt-> reset, он работал для меня.

1 Ответ

10 голосов
/ 09 июля 2011

Это хорошее применение close, особенно если вы планируете сделать еще один запрос. Как с помощью операторов PDO, так и MySQLi я обнаружил, что ошибки на стороне чистоты почти всегда являются лучшими - они устраняют потенциальные ошибки в будущем.

Что касается джентльменов с 250 операциями ... Я не понимаю, каков реальный вариант использования. Зачем ему запрашивать базу данных 250 раз? Почему он не может запросить базу данных один раз с 250 записями? Или, более вероятно, почему он не может запросить базу данных 25 раз с 10 записями?

...