Когда закрывать Подготовленное заявление


Когда закрывать подготовленные инструкции в 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->закрыть. но он всегда ломался с ошибкой примерно после 250 операции. Когда я попробовал это с помощью stmt->сброс, это сработало для меня.

Author: Tarik, 2011-07-09

1 answers

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

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

 8
Author: cwallenpoole, 2011-07-08 23:19:09