php / mysqli:我回来之前应该free_result吗?

时间:2013-03-25 13:56:34

标签: php mysqli

  

如果在函数内调用,则立即返回语句   结束当前函数的执行,并将其参数作为   函数调用的值。

引自php手册:http://php.net/manual/en/function.return.php

所以如果我要写这个函数:

public function check_db_for_desired_value()
{
  //...connect to db, prepare stmt, etc.
  while (mysqli_stmt_fetch($stmt))
  {
    if($column == 'desired_value')
    {
      return TRUE;  
    }
    else
    {
      return FALSE;
    }
  }
  // these commands would never get executed
  mysqli_stmt_free_result($stmt); 
  mysqli_stmt_close($stmt);
  mysqli_close($link);
}

所以(如果在php手册中说的是正确的)我的结果永远不会被释放,我的stmt永远不会被关闭,我的数据库连接保持打开状态,因为我返回了一些内容并结束了函数的执行...

那么我应该不是返回设置变量值的东西,而是在关闭所有内容后返回这个值吗?

我问,因为我的代码工作正常而且我没有收到任何错误,尽管我之前已经写过这样的函数...

1 个答案:

答案 0 :(得分:1)

你是对的,return之后没有执行任何内容。

但您可以使用__destruct关闭连接并清除结果:

function __destruct() {
    mysqli_stmt_free_result($this->stmt); // making $stmt a variable inside class
    mysqli_stmt_close($this->stmt);
    mysqli_close($this->link);
}
  

只要没有对特定对象的其他引用,或者在关闭序列期间以任何顺序,就会调用析构函数方法。 - PHP.NET

否则你应该在调用return之前移动释放和关闭。