Ich habe Ihre Klasse so modifiziert, dass sie so funktioniert, wie Sie es zu erwarten scheinen:
<?php
class Database
{
var $conn = null;
var $config = array(
'username' => 'someuser',
'password' => 'somepassword',
'hostname' => 'some_remote_host',
'database' => 'a_database'
);
function __construct() {
$this->connect();
}
function connect() {
if (is_null($this->conn)) {
$db = $this->config;
$this->conn = mysql_connect($db['hostname'], $db['username'], $db['password']);
if(!$this->conn) {
die("Cannot connect to database server");
}
if(!mysql_select_db($db['database'])) {
die("Cannot select database");
}
}
return $this->conn;
}
}
Verwendung:
$db = new Database();
$conn = $db->connect();
Beachten Sie, dass Sie connect() so oft aufrufen können, wie Sie möchten, und es wird die aktuelle Verbindung verwenden oder eine erstellen, wenn sie nicht existiert. Das ist eine gute Sache .
Beachten Sie außerdem, dass jedes Mal, wenn Sie instanziieren ein Datenbankobjekt (mit new) erstellen Sie eine neue Verbindung zur Datenbank. Ich schlage vor, dass Sie Ihre Datenbankklasse als Singleton implementieren oder es in einer Registrierung zu speichern für globalen Zugriff.
Sie können es auch auf die schmutzige Art machen und es in $GLOBALS schieben.
Bearbeiten
Ich habe mir die Freiheit genommen, Ihre Klasse zu modifizieren, um das Singleton-Muster zu implementieren und den PHP5-OOP-Konventionen zu folgen.
<?php
class Database
{
protected static $_instance = null;
protected $_conn = null;
protected $_config = array(
'username' => 'someuser',
'password' => 'somepassword',
'hostname' => 'some_remote_host',
'database' => 'a_database'
);
protected function __construct() {
}
public static function getInstance()
{
if (null === self::$_instance) {
self::$_instance = new self();
}
return self::$_instance;
}
public function getConnection() {
if (is_null($this->_conn)) {
$db = $this->_config;
$this->_conn = mysql_connect($db['hostname'], $db['username'], $db['password']);
if(!$this->_conn) {
die("Cannot connect to database server");
}
if(!mysql_select_db($db['database'])) {
die("Cannot select database");
}
}
return $this->_conn;
}
public function query($query) {
$conn = $this->getConnection();
return mysql_query($query, $conn);
}
}
Verwendung:
$res = Database::getInstance()->query("SELECT * FROM foo;");
oder
$db = Database::getInstance();
$db->query("UPDATE foo");
$db->query("DELETE FROM foo");