何时关闭预准备语句

2022-08-30 18:37:56

何时关闭 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等重复语句,则执行更大的操作。我 thougt id 最好用 stmt->close 来清理它。但它总是在aprox之后出现错误。250 次操作。当我用stmt->reset尝试它时,它对我有用。


答案 1

这是关闭的良好用法,特别是因为您计划进行另一个查询。对于PDO语句和MySQLi语句,我发现在清洁方面犯错几乎总是最好的 - 它消除了潜在的错误。

至于拥有250次手术的绅士们...我不明白真正的用例是什么。为什么他需要查询数据库250个不同的时间?为什么他不能查询一次包含 250 条记录的数据库?或者,更有可能的是,为什么他不能用10条记录查询数据库25次?


答案 2

我目前无法发表评论,所以我只是提供一个答案。运行在数据库中查询结果的预准备语句时,除非删除它所存储的当前结果,否则它不会执行其他查询。$result = $stmt->get_result()。其次,如果您需要保存第一个查询的结果以便以后使用它,那么我建议使用两个结果集。第一个存储第一次执行$stmt的结果,第二个存储第二个执行的结果。这可能不会直接回答问题,但它可能会帮助某人。


推荐