Intereting Posts
Не удалось найти путь аутентификации «login_check» для Symfony2 Проверка значения атрибута Xpath с переменной, переданной с помощью PHP Как найти разницу во времени между двумя датами с помощью PHP Могу ли я создать приложение exe для Windows с помощью PHP-программы и с помощью базы данных? как показать число недель и показать диапазон дат в php Группировка запроса с помощью php Undefined date_diff () Удаление не буквенно-цифровых символов из строки Как создать массив из вывода массива, напечатанного с помощью print_r? Повторный просмотр заголовка jquery mobile на разных страницах Как выбрать библиотеку аутентификации для CodeIgniter? Есть ли способ в PHP преобразовать числа в их письменную версию? Как добавить параметры фильтра в контроллеры в Laravel? Как объявить глобальную переменную в этом API? Ошибка анализа: ошибка синтаксиса, неожиданный $ end в home / search.php в строке 65

Практика создания классов БД требует небольшого руководства

Поэтому я собираюсь научиться создавать собственные классы DB, используя PDO. Я довольно новичок в PDO и более сложном развитии класса и хотел получить небольшое руководство от сообщества, прежде чем я заберусь с ним слишком далеко. У меня есть класс, частично построенный, но я знаю, что для этого должен быть лучший / более логичный способ.

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

В настоящее время у меня есть файл config.php с определенными константами DB и класс под названием DB. Вот мой код:

В index.php:

require_once 'config.php'; require_once '_inc/class.db.php'; $db = new DB(); 

И мой класс:

  public $dbh; public function __construct(){ $dbh = new PDO('mysql:host='.DB_HOST.';dbname='.DB_NAME, DB_USER, DB_PASSWORD); }//end __construct public function build_query( $args ){ $defaults = array( 'type' => 'SELECT', 'fields' => '*', 'table' => '', 'where' => '', 'orderby' => 'id', 'order' => 'DESC' 'offset' => '0', 'limit' => '' ); $params = array_merge( $defaults, $args ); $sql = $params['type']; $sql .= ' '.$params['fields'].' FROM '.$params['table']; if( $params['where'] ) $sql .= ' WHERE '.$params['where']; $sql .= ' ORDER BY '$params['orderby'].' '.$params['order']; if( $limit ) $sql .= ' LIMIT '.$params['offset'].', '.$params['offset']; return $sql; }//end build_query public function dbq( $args ){ $sql = $this->build_query( $args ); $this->$dbh->prepare( $sql ); return $this->$dbh->execute(); 

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

Заранее спасибо!

Solutions Collecting From Web of "Практика создания классов БД требует небольшого руководства"

Если я правильно прочитал ваш вопрос, вы ищете так называемый Query-Builder. Конструктор запросов – это класс, который имеет некоторые параметры и который может возвращать запрос на основе параметров.

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

Затем вы можете передать объект Query туда, где он принадлежит. Обычно вы используете это внутри в каком-то классе. Таким образом, вы на самом деле не спрашиваете о создании общего класса бота DB (который был бы запахом btw), но вы просто хотите, чтобы SQL Query String Builder был включен в собственный класс:

 /** * SQL Query */ class SqlQuery { public $type = 'SELECT', $fields = '*', $table, $where, $orderby = 'id', $order = 'DESC', $offset, $limit; /** * @return string */ public function getQuery() { $sql = sprintf('%s %s FROM %s', $this->type, $this->fields, $this->table); $this->where && $sql .= sprintf(' WHERE %s', $this->where) ; $sql .= sprintf(' ORDER BY %s %s', $this->orderby, $this->order); $this->limit && $sql .= sprintf(' LIMIT %s, %s', $this->offset, $this->limit) ; $sql .= ';'; ### not strictly necessary but nice for debugging ### return $sql; } public function __toString() { return $this->getQuery(); } } ### Usage: ### $query = new SqlQuery; $query->table = 'TABLE1'; echo $query; // SELECT * FROM TABLE1 ORDER BY id DESC; 

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