sql >> Base de Datos >  >> RDS >> Mysql

Configuración de la base de datos MySQL en una clase separada

Modifiqué tu clase para que funcione como pareces esperar:

<?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();

Tenga en cuenta que puede llamar a connect() tantas veces como desee y usará la conexión actual, o creará una si no existe. Esto es algo bueno .

Además, tenga en cuenta que cada vez que cree una instancia un objeto de base de datos (usando nuevo) creará una nueva conexión a la base de datos. Le sugiero que busque implementar su clase de base de datos como Singleton o almacenarlo en un Registro para acceso global.

También puedes hacerlo de forma sucia y meterlo en $GLOBALS.

Editar

Me tomé la libertad de modificar su clase para implementar el patrón Singleton y seguir las convenciones 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;");

o

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