От автора: При создании веб-приложений очень часто приходится писать и выполнять очень много SQL запросов, что порой не совсем удобно. Поэтому в данном уроке я хотел бы рассказать Вам об очень интересной библиотеке – FluentPDO, которая является удобным и простым в использовании конструктором SQL запросов.
Установка библиотеки
Для начала, давайте установим библиотеку FluentPDO, поэтому переходим на сайт официального разработчика и скачиваем данную библиотеку:
После скачивания мы получили архив, который необходимо распаковать. После распаковки, переходим в получившеюся папку, затем в каталог FluentPDO – это и есть интересующая нас библиотека. Исходные файлы данной библиотеки, необходимо скопировать в один из каталогов Вашего сайта, я копирую в папку lib. После копирования необходимо подключить файл FluentPDO.php, к Вашему сайтe или скрипту:
1 |
require_once "lib/FluentPDO.php"; |
Далее, как следует из названия, библиотека FluentPDO, работает с использованием расширения по работе с базой данных PDO. Поэтому первым делом необходимо создать подключение к базе данных, используя PDO, другими словами создать объект класса PDO:
1 |
$pdo = new PDO("mysql:dbname=fluentpdo",'root',''); |
Для сегодняшнего урока, я буду использовать тестовую базу данных fluentpdo, с небольшим количеством таблиц. Затем создаем объект главного класса библиотеки FluentPDO и передаем только что созданный объект класса PDO:
1 |
$fpdo = new FluentPDO($pdo); |
На этом установка библиотеки завершена, приступаем к работе с ней:
Выборка данных
Итак, для простой выборки данных всей полей произвольной таблицы, необходимо использовать метод from(), передав ему имя таблицы, данные которой необходимо получить:
1 |
$query = $fpdo->from('news'); |
Теперь давайте отобразим данные на экране, для этого достаточно пройтись в цикле по объекту $query:
1 2 3 |
<?php foreach ($query as $key=>$row) : ?> <p><?php echo $key.":".$row['title']; ?></p> <?php endforeach; ?> |
Давайте откроем браузер и посмотрим, что получилось:
Как Вы видите, все отлично работает. Обратите внимание, как быстро мы получили нужные нам данные, при этом нам не пришлось вручную писать SQL запрос, а затем используя специальные функции, выполнять его. Далее, давайте рассмотрим возможность фильтрации выборки, то есть формирование условия WHERE, в запросе к базе данных:
1 |
$query = $fpdo->from('pages')->where('type','post'); |
Метод where, добавляет в SQL запрос конструкцию WHERE, и принимает в качестве первого параметра, поле, по которому осуществляется фильтрации, а вторым параметром — значение данного поля. При этом на экране мы увидим отработку, данного метода:
Формирование условия WHERE IN:
1 |
$query = $fpdo->from('type')->where('in_header',array('1','2','3','4')); |
Для формирования условия данного типа, используется все тот же метод where, за исключением того, что во втором параметре передается массив параметров для конструкции IN, SQL – запроса. Очень часто для фильтрации, необходимо проверять, удовлетворяет ли определенному условию, некоторое значение. Поэтому давайте отобразим на экране все записи таблицы type, у которых поле in_header меньше 4.
1 |
$query = $fpdo->from('type')->where('in_header < :inheader',array(':inheader'=>'4')); |
Отличие данного примера в том, что первым параметром к методу where, мы передаем строку, в которой указываем какое поле сравнивается и оператор сравнения. А вместо значения указываем, специальную метку, которая впоследствии, будет заменена на значение ячейки массива, который передается вторым параметром к методу. Обратите внимание, что метка – полностью совпадает с ключом массива, передаваемого во втором параметре.
Так же хотел бы продемонстрировать полностью аналогичную по действию строку, но записанную несколько иначе:
1 |
$query = $fpdo->from('type')->where('in_header < ?',4); |
Здесь, в качестве метки используется вопросительный знак, который будет заменен, на значение второго параметра метода. При этом на экране мы увидим следующее:
Теперь давайте рассмотрим формирование условия WHERE AND, для этого при вызове метода where(), необходимо передать массив, при этом первая ячейка – это фильтрация по данному параметру, а затем каждая последующая – это новое условие AND.
1 |
$query = $fpdo->from('tovar')->where(array('brand_id'=>17,'publish'=>1)); |
В данном примере мы получаем все записи из таблицы tovar, где идентификатор категории равен 17 и поле puglish = 1. Сортировку данных в выборке, а также ограничение количества получаемых данных можно реализовать, вызвав следующие методы:
1 |
$query = $fpdo->from('tovar')->limit('0,10')->orderBy('title DESC'); |
Метод limit, принимает два параметра: первый – это с какого элемента нужно начать выборку результатов, и второй – количество выбираемых записей. Метод orderBy, используется для сортировки выборки. Параметром принимает всего одну строку с параметрами сортировки элементов скрипта. Теперь давайте рассмотрим, как выбрать только интересующие нас поля, так как до этого мы получали все поля из интересующих таблиц:
1 2 3 |
$query = $fpdo->from('brands') -> select(null) ->select(array('brand_name','parent_id')) |
Обратите, внимание, что если нужно выбрать только определенные поля, то первым делом необходимо вызвать метод select(null) и передать ему как параметром значение null, тем самым, сбросив получение всех полей из базы данных. Затем вызываем метод select повторно и передаем ему, те поля, которые необходимо получить из базы данных – в виде массива.
Теперь давайте рассмотрим, как выполнить выборку данных, используя левое объединение таблиц:
1 2 3 4 5 |
$query = $fpdo->from('brands') ->select(null) ->select(array('brands.brand_name','brands.parent_id')) ->leftJoin("tovar ON tovar.brand_id=brands.brand_id") ->select("tovar.title",'tovar.price'); |
Как Вы видите, для левого объединения, достаточно вызвать метод leftJoin и передать ему строку – параметр, в котором указан признак объединенная таблиц. То есть в данном примере, я выбираю данные из таблицы brands, а также из таблицы tovar. Аналогично если нужно использовать объединение INNER JOIN, необходимо вызвать метод innerJoin():
1 2 3 4 5 |
$query = $fpdo->from('brands') ->select(null) ->select(array('brands.brand_name','brands.parent_id')) -> innerJoin ("tovar ON tovar.brand_id=brands.brand_id") ->select("tovar.title",'tovar.price'); |
Редактирование данных
Библиотека FluentPDO, также помимо получения данных, очень хорошо умеет редактировать данные в базе данных. Для начала, давайте добавим данные в одну из таблиц:
1 2 |
$values = array('brand_name'=>'Тестовая категория Обновлено', 'parent_id'=>1); $fpdo->insertInto('brands')->values($values)->execute(); |
Для этого создаем массив содержащий данные для вставки. Ключи данного массива – это имена полей, в которые будут вставлены данные, а значения ячеек – это значения которые будут добавлены в соответствующие поля. Далее для вставки вызываем метод insertInto(), передаем ему, как параметром, имя таблицы, в которую добавляются данные. Затем вызываем метод values($values), в котором указываем массив данных для вставки. И в завершении вызываем метод execute(), который выполняет сформированный SQL запрос.
Для обновления существующих записей, необходимо воспользоваться следующими методами:
1 2 |
$values = array('brand_name'=>'Тестовая категория Обновлено', 'parent_id'=>1); $fpdo->update('brands')->set($values)->where("brand_id",40)->execute(); |
Здесь массив $values – это массив полей и значений, которые необходимо обновить. При вызове метода update, необходимо указать имя таблицы, поля которой подлежат обновлению, в свою очередь метод set(), принимает в качестве параметра массив $values. При обновлении данных, необходимо вызвать, уже знакомый нам метод where, который укажет какие именно поля следует обновить. И в завершении, вызываем метод execute(), который выполнит SQL запрос и тем самым, обновит данные.
Для удаления данных из таблиц, используется метод deleteFrom(), который принимает параметром, название таблицы, данные которой нужно удалить. Так же при вызове данного метода, можно вызвать метод where(), при помощи которого можно указать какие именно поля, подлежат удалению.
1 |
$fpdo->deleteFrom('brands')->where('brand_id',40)->execute(); |
Как Вы видите, библиотека очень полезная, конечно, она подойдет не для всех проектов, так как ее функционал все же ограничен. Но для не сложных сайтов, где необходимо создавать и выполнять большое количество различных запросов к базе данных – она вполне подойдет.
На этом данный урок завершен. Всего Вам доброго и удачного кодирования.