Как Вы справляетесь с соединениями с базой данных в php?

Большая часть материалов, которые я могу найти онлайн, является списками опубликованных ссылок. Раздел публикаций Шаблоны Игрового дизайна имеет ссылки на версии PDF статей и тезисов. Многие из них похожи на научные работы как Шаблоны разработки для Игр . Существует, также по крайней мере один заказывает доступный из Amazon, Шаблоны в Игровом дизайне .

14
задан Marc W 16 October 2009 в 22:37
поделиться

3 ответа

Использование классов - это способ повысить настраиваемое повторное использование.

Внесите в класс все общие реализации. Вы на правильном пути.

Этот веб-сайт использует следующий чистый подход.
Ссылка на этот веб-сайт больше не существует. Архивная ссылка .

class connection {
    // Possible Modules are as follows:
    // DBX_MYSQL, DBX_ODBC, DBX_PGSQL, DBX_MSSQL, DBX_FBSQL, DBX_SYBASECT, DBX_OCI8, DBX_SQLITE
    private $module = DBX_MYSQL; 

    private $host = "localhost";
    private $database = "test";
    private $username = "testuser";
    private $password = "testpass";

    private $link;
    private $result;
    public $sql;

    function __construct($database=""){
            if (!empty($database)){ $this->database = $database; }
            $this->link = dbx_connect($this->module,$this->host,$this->database,$this->username,$this->password);
            return $this->link;  // returns false if connection could not be made.
    }

    function query($sql){
            if (!empty($sql)){
                    $this->sql = $sql;
                    $this->result = dbx_query($this->link,$sql,DBX_RESULT_UNBUFFERED);
                    return $this->result;
            }else{
                    return false;
            }
    }

    function fetch($result=""){
            if (empty($result)){ $result = $this->result; }
            return dbx_fetch_row($result);
    }

    function __destruct(){
            dbx_close($this->link);
    }
}
3
ответ дан 1 December 2019 в 13:47
поделиться

Ваш текущий подход довольно стандартный и хорошо работает. Пользуюсь им давно. Это правда, что такие модули, как PDO, теперь предоставляют базовую функциональность, подобную этой, что тоже очень приятно и может избавить вас от проблем с домашним кодом.

Однако я продвинулся в управлении подключением еще на один шаг. Если вы попадаете в сложное приложение, вы можете попасть в ситуацию, когда у вас несколько баз данных или интенсивное использование базы данных. Включение одного файла подключения к базе данных и наличие глобальной переменной $ database становится громоздким для нескольких баз данных, и это не нужно для запросов приложений, которые могут не требовать подключения к базе данных. Помните, что подключение к базе данных стоит дорого.

What I ' Мы создали одноэлементный класс DatabaseManager, который обрабатывает объект базы данных за меня и гарантирует, что несколько подключений к данной БД не будут созданы. Вместо того, чтобы инициализировать новый объект базы данных в верхней части вашего приложения, вы просто вызываете DatabaseManager каждый раз, когда вам нужен объект.

$db = DatabaseManager::getDatabase();

Вот пример класса, который я создал для проекта CodeIgniter. Вы можете увидеть в функции getDatabase () , которая просто загружает объект базы данных CodeIgniter по умолчанию, который вы бы заменили на свой собственный класс (и запустите для него процедуру подключения), если бы вы не использовали CI. Это довольно упрощенный класс управления, который можно довольно легко расширить для управления несколькими подключениями к разным базам данных.

<?php

/**
 * Implements the Singleton pattern to prevent multiple instantiations and connections
 * to the application database.
 *
 */
class Database_manager
{
    private static $instance;
    public $db;

    /**
     * Constructor function is declared private to prevent instantiation.
     *
     */
    protected function __construct()
    {
        parent::__construct();
    }

    /**
     * Returns an instance of a Database_manager.
     *
     * @return object Database_manager object
     */
    public static function getInstance()
    {
        if (self::$instance == null) {
            $className = __CLASS__;
            self::$instance = new $className();
        }
        return self::$instance;
    }

    public static function getDatabase()
    {
        $instance = self::getInstance();
        if ($instance->db == null) {
            //utilize CodeIgniter's database loader
            $instance->db = $instance->load->database('',true);
            if (! is_object($instance->db)) throw new Exception("Could not load database.");
        }
        return $instance->db;
    }
}

Пожалуй, наиболее распространенное преимущество, которое я получаю от использования этого стиля управления подключением, - это когда мне нужно отключить приложение для обслуживания базы данных. Не создавая экземпляр соединения с базой данных до тех пор, пока оно мне не понадобится, я могу легко разместить на сайте сообщение «выполняется обслуживание» (короткое замыкание обычной диспетчеризации MVC) и не беспокоиться о запросах к приложению, открывающему соединение с БД во время обслуживания. прогресс.

5
ответ дан 1 December 2019 в 13:47
поделиться

Я рекомендую использовать PDO . Не изобретайте велосипед заново. Это хороший объектно-ориентированный интерфейс для многих движков баз данных . Кроме того, я создаю небольшую функцию, которая просто инициализирует объект PDO. Таким образом, все настройки подключения можно изменить в одном месте.

9
ответ дан 1 December 2019 в 13:47
поделиться
Другие вопросы по тегам:

Похожие вопросы: