Mysql
 sql >> Database >  >> RDS >> Mysql

Configurazione del database MySQL in una classe separata

Ho modificato la tua classe in modo che funzioni come te lo aspetti:

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

Utilizzo:

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

Nota che puoi chiamare connect() tutte le volte che vuoi e utilizzerà la connessione corrente o ne creerà una se non esiste. Questa è una cosa buona .

Inoltre, tieni presente che ogni volta che istanzia un oggetto Database (usando new) creerai una nuova connessione al database. Ti suggerisco di esaminare l'implementazione della tua classe Database come Singleton o salvarlo in un Registro per l'accesso globale.

Puoi anche farlo nel modo sporco e spingerlo in $GLOBALS.

Modifica

Mi sono preso la libertà di modificare la tua classe per implementare il modello Singleton e seguire le convenzioni 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);
    }
}

Utilizzo:

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

o

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