这是我正在使用的:
<?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());
}
}
?>
Usage:
$oDb = Database::init();
$sql = foo;
$oDb->query($sql);
假设我只希望它连接并执行这个查询函数,我应该对该类进行任何改进吗?内存还是代码效率?
另外,有没有一种有效的方法可以从配置文件中获取数据库凭据?我知道我不能在我的班级中使用包含。
我通常在这种情况下使用延迟初始化,并且只有一个公共方法(在本例中),并使用私有构造函数来防止外部实例化(根据单例模式):
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。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)