Загрузить объект pdo в класс php - PullRequest
0 голосов
/ 01 октября 2011

У меня есть один файл, в котором у меня есть соединение с базой данных (PDO). И поскольку PDO - это класс (библиотека) или что-то в этом роде, я не чувствую необходимости в классе базы данных (или я должен его создать?).Я хочу загрузить объект pdo, чтобы я мог использовать функции в другом классе, но я не уверен, как это сделать.

pdo_object.php

//single php db connection file here..
$dbh = ...

user.php

class User {
    function login()
    {
        //do pdo query here...
    }
}

Нужно ли вводить $dbh в каждый отдельный класс, которому требуется соединение с базой данных?

1 Ответ

0 голосов
/ 01 октября 2011

"Я не понимаю вашего вопроса. В User-> login () просто поместите ваш PDO логика. "- Разве мне не нужно загружать в DBH как-то в классе?

Нет единого ответа на это! Если ваш класс собирается выполнять логику (практически говоря, выполняя mysql_query), вам нужно предоставить обработчик соединения.

С другой стороны, ваш класс не выполняет запрос, но выполняет, например, некоторые задачи, такие как: создание запросов, применение логики, проверка правильности данных запроса, предоставленных пользователем, и т. Д., То нет необходимости загружать обработчик, что вызывает другому классу это понадобится.

Я все еще верю, что подобные вопросы (о дизайне) очень сложные и философские, общие и т. Д., Если они не очень специфичны, а у вас не так много.

А поскольку PDO - это класс (библиотека) или что-то еще, я не чувствую необходимости класс базы данных (или я должен построить один)

На практике мы создаем класс базы данных, и не только для размещения там только обработчика pdo, но и потому, что есть очень много вещей, которые можно определить apriori и которые вам очень помогут. У вас может быть не только обработчик базы данных (например, для общего пользования и для внутреннего использования), у вас могут быть свои собственные методы, проверяющие это из старого проекта:

public  function getValueLike($dbh, $table,$col_name, $value )
    {     

                $col_name = '`'. $col_name . '`';
                $sql = 'SELECT '. $col_name .' FROM '. $table .' where  '. $col_name ." like ? limit 2" ;

            //prepare,execute
            $stmt =  $dbh->prepare($sql );
            $stmt->execute(array('%'.$value.'%'));

            //we want it is an array with int keys
            $stmt->setFetchMode(PDO::FETCH_NUM); 
            $tmp =   $stmt->fetchAll(); //get all values

            $res[] = $tmp[0];//get the first value
            $res[] = count($tmp);//get the count

            //return the 1st value found, also the count which at most can be 2 
            return  $res ; 
    }

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

Если вы решили построить класс, вы вызываете его только один раз в самом начале, а затем просто передаете объект.

  • Выберите MVC, выберите хороший, структура в основном предопределена, и это заставит вас применить некоторые интересные вещи и сделает вас лучшим программистом.

  • Что касается обработчика базы данных, я предлагаю, как минимум, сделать его одноэлементным (статическим объектом) и передавать объект по мере необходимости, еще лучшим решением является использование нестатического способа с использованием реестра. Где вы только передаете объект реестра где-нибудь, и все, что вам нужно, доступно. Если вы не можете войти в MVC, попробуйте создать собственный реестр, это сэкономит много времени. Там есть хорошие уроки !!

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