【发布时间】:2015-07-10 22:38:07
【问题描述】:
我是PHP 的新手,我正在尝试完成这个简单的任务:从MySql 数据库获取数据。
我创建了一个单例类来与数据库通信:
class Database {
private static $db = null;
private $servername;
private $username;
private $password;
private $connection;
private function Database(){
$this->servername = "localhost";
$this->username = "user";
$this->password = "123456";
}
public static function get_database(){
if(!static::$db){
static::$db = new Database();
}
return static::$db;
}
function start_connection(){
$this->connection = new mysqli($this->servername,
$this->username,
$this->password);
}
function execute_query($query){
$this->start_connection();
[...]
$this->disconnect();
}
function disconnect(){
$this->connection->close();
}
[...]
}
这段代码运行良好,但有一件事让我很困扰。我想知道我是否真的需要在每次调用start_connection() 时创建一个新的连接对象new mysqli()。有reconnect之类的吗?
【问题讨论】:
-
这完全取决于您。大多数人只是在构造函数中连接到数据库一次,然后将该连接重新用于所有内容。但一般来说,如果您需要使用不同的凭据访问数据库,您唯一需要多次连接到数据库的时间。
-
你听说过“单例”模式吗?也许你可以在你的数据库类中使用类似的东西。
-
@Mindastic - 这几乎是一个使用
get_database()代替“标准”getInstance()的单例模式 - 正如问题中的 OP 所述......虽然我认为单例模式不一定是数据库处理程序(会话处理程序,是的)的正确选择,因为您可能想要连接到不同的数据库服务器(例如,www 服务器 db 和 newsletter/mailserver db 在同一个脚本中从“我的帐户”类型页面管理时事通讯订阅) -
@CD001 你是完全正确的。当我最初阅读这个问题时,我不知道为什么我错过了“get_database”。请忽略我之前的评论。感谢您指出。
-
我从未真正尝试过,因为我倾向于让 db 连接在脚本结束时自行终止,但您可以(理论上)连接到数据库
__construct()函数并在__destruct()函数中断开与数据库的连接;这样,当您的对象被终止时,它也应该终止连接(并释放资源指针)。