Mysql
 sql >> Base de données >  >> RDS >> Mysql

Configuration de la base de données MySQL dans une classe distincte

J'ai modifié votre classe pour qu'elle fonctionne comme vous semblez vous y attendre :

<?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;
    }
}

Utilisation :

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

Notez que vous pouvez appeler connect() autant de fois que vous le souhaitez et il utilisera la connexion actuelle, ou en créera une si elle n'existe pas. C'est une bonne chose .

Notez également que chaque fois que vous instanciez un objet Database (en utilisant new), vous allez créer une nouvelle connexion à la base de données. Je vous suggère d'envisager d'implémenter votre classe Database en tant que Singleton ou le stocker dans un Registre pour un accès global.

Vous pouvez aussi le faire de manière sale et le mettre dans $GLOBALS.

Modifier

J'ai pris la liberté de modifier votre classe pour implémenter le modèle Singleton et suivre les conventions 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);
    }
}

Utilisation :

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

ou

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