何时关闭准备好的声明

时间:2011-07-08 22:52:30

标签: php prepared-statement

何时在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->重置它对我有用。

2 个答案:

答案 0 :(得分:9)

这是一个很好的使用close,特别是因为你打算进行另一个查询。通过PDO语句和MySQLi语句,我发现在清洁方面的错误几乎总是最好的 - 它可以消除潜在的错误。

对于有250次操作的绅士......我不知道真正的用例是什么。为什么他需要不同时间查询数据库250?为什么他不能用250条记录查询数据库一次?或者,更有可能的是,他为什么不能用10条记录查询数据库25次?

答案 1 :(得分:0)

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