Mysql
 sql >> база данни >  >> RDS >> Mysql

Конфигурация на база данни на MySQL в отделен клас

Промених класа ви, за да работи така, както изглежда го очаквате:

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

Употреба:

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

Имайте предвид, че можете да извикате connect() колкото пъти искате и той ще използва текущата връзка или ще създаде такава, ако не съществува. Това е добро нещо .

Също така, имайте предвид, че всеки път, когатоизграждате инстанция обект на база данни (с помощта на new) ще създавате нова връзка към базата данни. Предлагам ви да разгледате внедряването на вашия клас Database като Singleton или да го съхранявате в Регистър за глобален достъп.

Можете също да го направите по мръсния начин и да го поставите в $GLOBALS.

Редактиране

Позволих си да модифицирам вашия клас, за да внедря модела Singleton и да следвам конвенциите на 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);
    }
}

Употреба:

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

или

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


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. MySQL в Docker връща Изисканият от сървъра метод за удостоверяване, неизвестен на клиента

  2. Как да закръглите DateTime в MySQL?

  3. Не може да се свърже с MySQL база данни на Node.js

  4. Показване на най-близкия резултат до текущата дата и час (MySQL и PHP)

  5. Емотиконите за iPhone се вмъкват в MySQL, но стават празна стойност