Mysql
 sql >> Base de Dados >  >> RDS >> Mysql

Configuração do banco de dados MySQL em uma classe separada


Modifiquei sua classe para funcionar como você espera que ela:
<?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;
    }
}

Uso:
$db = new Database();
$conn = $db->connect();

Observe que você pode chamar connect() quantas vezes quiser e ele usará a conexão atual ou criará uma se ela não existir. Isso é uma coisa boa .

Além disso, observe que cada vez que você instanciar um objeto Database (usando new) você estará criando uma nova conexão com o banco de dados. Sugiro que você considere implementar sua classe Database como um Singleton ou armazená-lo em um Registro para acesso global.

Você também pode fazer do jeito sujo e enfiar em $GLOBALS.

Editar

Tomei a liberdade de modificar sua classe para implementar o padrão Singleton, e seguir as convenções PHP5 OOP.
<?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);
    }
}

Uso:
$res = Database::getInstance()->query("SELECT * FROM foo;");

ou
$db = Database::getInstance();
$db->query("UPDATE foo");
$db->query("DELETE FROM foo");