这是我正在使用的:
<?php
final class Database {
private static $oDb;
public static function init() {
if(self::$oDb == NULL)
{
self::$oDb = mysql_connect('localhost', 'mysql_user', 'mysql_password') or die(mysql_error());
mysql_select_db('mysql_db_name', self::$oDb) or die (mysql_error());;
}
return self::$oDb;
}
public function query($sql)
{
return mysql_query($sql) or die(mysql_error());
}
}
?>
用法:
$oDb = Database::init();
$sql = foo;
$oDb->query($sql);
假设我只希望它连接并执行这一个查询功能,我应该在类上做些什么改进?内存还是代码效率?
此外,是否有一种有效的方法可以从配置文件中获取数据库凭据?我知道我不能在类里面使用 include。
最佳答案
我通常在这种情况下使用惰性初始化,并且只有一个公共(public)方法(在这种情况下),带有一个私有(private)构造函数以防止外部实例化(根据单例模式):
class Database {
private static $instance;
private $conn;
private function Database() {
// do init stuff
require_once('dbconfig.php'); // contains define('DB_USER', 'webuser'); etc...
$this->conn = mysql_connect(DB_HOST, DB_USER, DB_PASS); // do error checking
}
public static function getInstance() {
if(!self::$instance) {
self::$instance = new Database();
}
return self::$instance;
}
public static function query($sql) {
$instance = self::getInstance();
return mysql_query($sql, $instance->conn);
}
}
然后您可以在任何需要使用它的时候调用$dbHandle = Database::getInstance()
。或者在这种情况下,由于定义了静态查询方法,您可以使用 Database::query("select * from xx;");
而无需调用任何类型的 init。
关于php - 在 php 中制作 mysql 单例数据库类的任何更简单/更好的方法?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2018444/