我有以下类来处理大多数数据库查询,预处理语句等。以下是我所拥有的课程样本。
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();
因为我在需要该文件时每次在页面加载时实例化该类,我应该如何关闭与数据库的连接?我可以把它打开吗?
答案 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