sql >> Databáze >  >> RDS >> Mysql

Konfigurace databáze MySQL v samostatné třídě

Upravil jsem vaši třídu, aby fungovala tak, jak se zdá, že to bude:

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

Použití:

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

Všimněte si, že connect() můžete volat, kolikrát chcete, a použije aktuální připojení, nebo nějaké vytvořit, pokud neexistuje. To je dobrá věc .

Nezapomeňte také, že pokaždé, když vytváříte instanci a Database object (pomocí new) vytvoříte nové připojení k databázi. Navrhuji, abyste se podívali na implementaci třídy Database jako Singleton nebo jej uložit do registru pro globální přístup.

Můžete to také udělat špinavým způsobem a strčit to do $GLOBALS.

Upravit

Dovolil jsem si upravit vaši třídu tak, aby implementovala vzor Singleton a řídila se konvencemi 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);
    }
}

Použití:

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

nebo

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


  1. MySQL:vyberte nejbližší shodu?

  2. Objednejte výsledek formuláře Mysql group by

  3. ekvivalent `show create table` v Oracle SQL

  4. Nejlepší DBaaS řešení pro PostgreSQL