Как объединить несколько соединений базы данных php / mysql? - PullRequest
0 голосов
/ 19 января 2010

При создании динамических веб-сайтов я использую php include для подключения к базе данных. Включенный файл является очень простым:

mysql_connect($hostname = 'host', $username = 'user', $password = 'password'); mysql_select_db('database');

Это отлично работает.

В некоторых местах я использую систему AJAX для создания переупорядочения записей базы данных путем перетаскивания, которое одновременно обновляет базу данных, оно адаптировано из того, что я нашел в Интернете. При этом используется собственный код подключения:

class SortableExample { protected $conn;<br> protected $user = 'user';<br> protected $pass = 'password';<br> protected $dbname = 'database';<br> protected $host = 'host';<br> public function __construct() {<br> $this->conn = mysql_connect($this->host, $this->user, $this->pass);<br> mysql_select_db($this->dbname,$this->conn);<br> }

Это тоже прекрасно работает.

Однако это означает, что мне нужно добавить имя пользователя, пароль, хост и базу данных в два отдельных файла. Иногда второй забывается и приводит к сбою сайта.

У меня вопрос: как мне объединить оба файла подключения в один ИЛИ как получить второй блок кода для приема внешних переменных, чтобы мне нужно было вводить действительные значения только в одном месте?

Ответы [ 3 ]

1 голос
/ 19 января 2010

Ваш последний вопрос прост.

db.config.php

$host = '';
$user = '';
$pass = '';
$db = '';

db.plain.php

include 'db.config.php';

$conn = mysql_connect($host, $user, $pass);
mysql_select_db($db,$conn);

db.class.php

include 'db.config.php';

class SortableExample
{
  protected $conn;
  public function __construct()
  {
    global $host, $user, $pass, $db;
    $this->conn = mysql_connect($host, $user, $pass);
    mysql_select_db($db,$this->conn);
  }
}
0 голосов
/ 19 января 2010

Создайте единственную точку входа для вашего подключения к базе данных.

Используйте для этого Singleton с ленивым созданием:

class ConnectionProvider { 
    protected $conn;
    protected $user = 'user';
    protected $pass = 'password';
    protected $dbname = 'database';
    protected $host = 'host';
    private static $__instance;

    private function __construct() {
        $this->conn = mysql_connect($this->host, $this->user, $this->pass);
        mysql_select_db($this->dbname,$this->conn);
    }

    public static function getInstance() {
        if ( self::$__instance == null) {
            self::$__instance = new ConnectionProvider();
        }
        return self::$__instance;
    }

    public function getConnection() {
        return $this->conn;
    }
}

А затем из своего кода

ConnectionProvider::getInstance()->getConnection();

, чтобы использовать соединение там, где вам нужно.

Таким образом, SortableExample станет:

class SortableExample { 
    protected $conn;
    public function __construct() {
        $this->conn = ConnectionProvider::getInstance()->getConnection();
    }
    ...
}
0 голосов
/ 19 января 2010

Вы можете просто поместить код подключения к базе данных в другой файл и включить его везде, где он вам нужен.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...