【问题标题】:When Should I Be Closing My DB Connection In My Class我什么时候应该在课堂上关闭我的数据库连接
【发布时间】:2017-03-13 18:27:56
【问题描述】:

我有以下类来处理我的大部分数据库查询、准备好的语句等。以下只是我所学课程的一个示例。

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();

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

【问题讨论】:

    标签: php oop mysqli


    【解决方案1】:

    您可以将其保持打开状态,因为无论如何,只要您的脚本完成执行,连接就会关闭。 PHP website on mysqli_close 提供以下信息,说明为什么建议关闭连接:

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

    【讨论】:

    • 我同意你的观点,因为我说无论如何建议关闭连接。 :)
    【解决方案2】:

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

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2011-01-25
      • 2018-05-08
      • 2013-12-27
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多