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

MySQL-databasekonfiguration i en separat klasse

Jeg ændrede din klasse til at fungere, som du ser ud til at forvente, at den skal:

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

Brug:

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

Bemærk, at du kan kalde connect() så mange gange du vil, og den vil bruge den aktuelle forbindelse, eller oprette en, hvis den ikke eksisterer. Dette er en god ting .

Bemærk også, at hver gang du instanserer et databaseobjekt (ved hjælp af nyt), vil du oprette en ny forbindelse til databasen. Jeg foreslår, at du overvejer at implementere din databaseklasse som en Singleton eller gemme det i et registrering for global adgang.

Du kan også gøre det på den beskidte måde og skubbe det ind i $GLOBALS.

Rediger

Jeg tog mig den frihed at ændre din klasse for at implementere Singleton-mønsteret og følge PHP5 OOP-konventionerne.

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

Brug:

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

eller

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


  1. Sådan henter du matchposter på tværs af flere tabeller i MySQL

  2. PHP Liste brugere fra SQL-database i tabel

  3. Hvordan bruger man en pakkekonstant i SQL SELECT-sætning?

  4. Sende et array til en forespørgsel ved hjælp af en WHERE-sætning