【问题标题】:When to close Prepared Statement何时关闭准备好的语句
【发布时间】:2011-10-01 15:52:44
【问题描述】:

什么时候在 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-> 关闭。但它总是坏掉 aprox 后出现错误。 250 操作。正如我尝试过的那样 stmt->reset 它对我有用。

【问题讨论】:

  • 我对同样的事情感到好奇...正在看这个帖子!

标签: php prepared-statement


【解决方案1】:

这是 close 的一个很好的用法,尤其是当您计划进行另一个查询时。对于 PDO 语句和 MySQLi 语句,我发现在清洁方面犯错几乎总是最好的——它消除了潜在的错误。

至于有 250 次操作的先生们......我看不出真正的用例是什么。为什么他需要查询数据库 250 次不同的时间?为什么他不能用 250 条记录查询一次数据库?或者,更有可能的是,他为什么不能用 10 条记录查询数据库 25 次?

【讨论】:

  • 你说它只对清洁有好处吗?因为我有一个问题,当我使用两个准备语句而不关闭第一个时,我得到一个错误(见stackoverflow.com/questions/37164371/…)。不太清楚为什么,因为我从来没有读过这是至关重要的
【解决方案2】:

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2014-04-17
    • 1970-01-01
    • 2016-02-24
    • 1970-01-01
    • 1970-01-01
    • 2014-09-16
    • 2014-04-11
    • 2012-06-07
    相关资源
    最近更新 更多