我什么时候应该在我的班级关闭我的数据库连接

时间:2017-03-13 18:27:57

标签: php oop mysqli

我有以下类来处理大多数数据库查询,预处理语句等。以下是我所拥有的课程样本。

PhP(database.php)

class Database{

 public $mysqli;


  function __construct(){
    // Open the connection to the DB on construct
    $this->open_connection();
  }

  private function open_connection(){
    $this->mysqli = new mysqli(DB_SERVER, DB_USER, DB_PASS, DB_NAME);
    if(mysqli_connect_errno()){
      die("Database connection failed: " . mysqli_connect_error() . " ( " . mysqli_connect_errno()  . " ) ");
    }
  }

  /*
  * Creates a user
  */
  public function create_user($username, $password){
    $stmt = $this->mysqli->prepare("INSERT INTO Users(username,password,dateCreated) VALUES(?,?,NOW())");
    $password = $this->hash_password($password);
    $stmt->bind_param("ss", $username, $password);
    if( !$stmt->execute() ) :
      $error =  "Execute failed: (" . $stmt->errno . ") " . $stmt->error;
    endif;
    $stmt->close();
    return $error;
  }

  // ....
}
$db = new Database();

因为我在需要该文件时每次在页面加载时实例化该类,我应该如何关闭与数据库的连接?我可以把它打开吗?

2 个答案:

答案 0 :(得分:-1)

您可以将其保持打开状态,因为无论何时脚本完成执行,连接都将关闭。 PHP website on mysqli_close提供了以下有关建议何时关闭连接的信息:

  

打开非持久性MySQL连接和结果集   PHP脚本完成执行后自动销毁。所以,   而显式关闭打开连接和释放结果集是   可选,建议这样做。这将立即返回   PHP和MySQL的资源,可以提高性能。相关的   信息,请参阅freeing resources

答案 1 :(得分:-1)

始终:尽快关闭您不再需要的所有资源。在请求下一页之前,您不能将其保持打开状态,因为只要服务器完成特定页面的服务,它就会终止。

浏览到其他页面时,无论如何都必须再次打开连接。这就是连接池派上用场的地方:https://dev.mysql.com/doc/apis-php/en/apis-php-mysqlnd-mux.connection_pool.html