Отделение базы данных CODE для реального - PullRequest
2 голосов
/ 11 марта 2012

Я нахожусь в проекте по созданию веб-приложения.Запись в php5.

Когда я создавал пользовательскую систему (вход в систему, регистрация новых пользователей и т. Д.), У меня внезапно появился код базы данных повсюду.Не поймите меня неправильно, я использую одноэлементный класс базы данных с одной функцией запроса.

class MySQLDB {

    private staic $instance = null;
    private $config;
    private $connection = null;

    [...]

    public function query($query, $other_dbname = NULL) {
        $name = $this->config->dbname;
        if($other_dbname != NULL) {
            $name = $other_dbname;
        }

        mysql_select_db($name, $this->connection);
        $result = mysql_query($query);
        [...]
    }

Пока все хорошо.Однако куда ставить SQL-запросы?Я имею в виду, что в примерах через Интернет вы видите запросы к базе данных в системе аутентификации, которые сильно связывают два совершенно разных модуля.Что если мы решим не использовать базу данных MySQL?Тогда вам не нужно только поменять класс MySQLDB с подключением и функцией запроса, но все части всего веб-приложения с SQL-запросами в них.

Мое решение состояло в том, чтобы иметь статический класс MySQLQueryer рядом с классом MySQLDB.Где я храню и выполняю ВСЕ запросы SQL.Подобно этой функции register-a-new-user:

public function register($user, $hash, $salt) {
    $user = mysql_real_escape_string($user);
    $query = "INSERT INTO users ( username, password, salt ) VALUES ( '$user' , '$hash' , '$salt' );";
    $ret = $this->db->query($query);

    return $ret;
}

Обратите внимание, что все создание хешей и солей выполняется в модуле аутентификации пользователя (то есть не в модуле базы данных).

Считаете ли вы это хорошим решением или есть лучшие? Например, лучше ли создать класс AuthenticationMySQLDatabaseHelper с указанной выше функцией register?То есть каждый отдельный модуль должен иметь свой собственный класс MySQLDatabaseHelper для выполнения запросов.

Может, я делаю проблему больше, чем есть?

1 Ответ

1 голос
/ 11 марта 2012

Как упомянуто biziclop: посмотрите на

или других слоев абстракции.

Если вы хотите что-то построить самостоятельно, это кажется хорошим началом того, что вы пытаетесь сделать.

...