2012-01-31 68 views
4

何时应该调用mysqli :: close?我从来没有用过if语句来检查bind_param(),prep()和execute()是否成功。我应该在方法末尾调用$ stmt-> close()(下面)。或者我应该在每种情况之后调用它,以确保即使在某个阶段进程失败时关闭数据库连接,例如绑定参数。何时调用mysqli :: close

public function function_name($id,$new_id){ 
    $query = "UPDATE TABLE SET name = ? WHERE field = ? "; 
    if($stmt=$this->prepare($query)){ 
     if($stmt->bind_param("is", $id, $new_id)){ 
      if($stmt->execute()){ 

      }else{//Could not execute the prepared statement 
       $message = "Could not execute the prepared statement"; 
      } 
     }else{//Could not bind the parameters 
      $message = "Could not bind the parameters"; 
     } 
    }else{ 
     $message = "Could not prepare the statement"; 
    } 
    return $message 
} 
+1

除非您处于长时间运行脚本的情况,否则不要执行关闭操作,因为在脚本退出时,PHP将为您清理。除非您确定已完成所有数据库操作,否则不应关闭连接。 – 2012-01-31 16:45:20

+0

@MarcB - 我不确定我是否同意这是很好的做法。虽然PHP会自动将所有内容全部拆除,但如果您打算迁移到本地编程领域,养成照顾资源和处理完它们的习惯是一个非常重要的习惯。 – Polynomial 2012-01-31 16:50:40

+0

顺便说一句,你应该看看PHP异常处理,而不是使用'if'语句的巨大嵌套:http://php.net/manual/en/class.exception.php – Crontab 2012-01-31 17:04:00

回答

0

当你完成它时,你应该总是优雅地关闭连接,以避免性能和内存/处理泄漏问题。另一方面,你也应该确保你的真的是完成它 - 你的脚本会崩溃,如果你尝试使用一个封闭的连接。

语句也是如此。如果陈述不再使用,请适当处置。

0

只需稍微考虑一下,您可以创建另一个名为function_close的方法,并在调用function_name方法后调用它。

这样,如果您更改为pdo或mongo,您只需重构方法而不是每个实例close

+0

我不认为他在问这个。 – Polynomial 2012-01-31 16:51:13

+0

试着想我会给他一些想法。 – 2012-01-31 16:52:29

7

当PHP退出时,它会优雅地关闭数据库连接。

使用close方法的唯一原因是当你想终止一个你不再使用的数据库连接,并且你有很多事情要做:像处理和流式处理数据,但如果这是快速的,你可以忘记关闭声明。

将它放在脚本的末尾意味着冗余,没有性能或内存增益。

请告诉我是非常重要的:未设置未使用的数据,如果你想避免内存泄漏(这在我的卑微opnion在这种情况下PHP核心的问题)使用方法:

mysqli_kill(); 
mysqli_close(); 

这样的插座也杀了。