Небольшой класс оберкта для PDO. Был разработан для служебных нужд, с целью облегчения перехода на PDO. Конструктор запросов расширяет функционал использования PDO.
Установка через Composer.
$ composer require zyxus/db
Возвращает результат true
- если запрос выполнен, false
- если запрос ничего не вернул.
В случае ошибки выбрасывается исключение и выводится скрипт и строка ошибки и описание ошибки.
bool DB::query($query);
Возвращает количество обработанных запросом строк
$count = DB::query($query)->rowCount();
Возвращает 1 строку с результатом запроса
$count = DB::query($query)->fetch();
Возвращает все строки с результатами запроса
$count = DB::query($query)->fetch();
Возвращает последний вставленный запросом id
$count = DB::instance()->lastInsertId();
Использование prepared statements укрепляет защиту от SQL-инъекций.
Prepared statement — это заранее скомпилированное SQL-выражение, которое может быть многократно выполнено путем отправки серверу лишь различных наборов данных. Дополнительным преимуществом является невозможность провести SQL-инъекцию через данные, используемые в placeholder’ах.
$query = "SELECT `field1`, `field2` FROM `table` WHERE `id` = ? AND `field3` = ?";
$params = [100, 'Y'];
$data = DB::query($query, params)->fetch();
$query = "SELECT `field1`, `field2` FROM `table` WHERE `id` = :id AND `field3` = :field3";
$params = [
':id' => 100,
':field3' => 'Y',
];
$data = DB::query($query, params)->fetch();
Выбор одной строки fetch()
$query = "SELECT `field` FROM `table` WHERE `id` = :id";
$articul = DB::query($query, [':id' => 2797])->fetch(); // если не указан PDO::FETCH_NUM то вернется ассоциативный массив
Возвращает
[
[id] => 1234
[name] => Название поля
]
// или если в fetch(PDO::FETCH_NUM) то вернется нумерованный массив
[
[0] => 1234
[1] => Название поля
]
Выбор всех результатов запроса fetchAll()
$data = DB::query($query)->fetchAll();
Выборка ассоциативного массива данных
$data = DB::query($query)->fetchAll(PDO::FETCH_ASSOC);
Возвращает
[
[0] => Array
(
[id] => 1234
[name] => Название поля 1
)
[1] => Array
(
[id] => 1235
[name] => Название поля 2
)
[2] => Array
(
[id] => 1236
[name] => Название поля 3
)
]
Выборка нумерованного массива данных
$data = DB::query($query)->fetchAll(PDO::FETCH_NUM);
Возвращает
[
[0] => Array
(
[0] => 1234
[1] => Название поля 1
)
[1] => Array
(
[0] => 1235
[1] => Название поля 2
)
[2] => Array
(
[0] => 1236
[1] => Название поля 3
)
]
$query = "SELECT `id`, `name` FROM `table` WHERE `id` = ?";
if (!$array = DB::query($query, [$id])->fetchAll()) {
echo "Нет записей";
}
$query = "SELECT `name` FROM `table` WHERE `id` = ?";
$result = DB::query($query, [$articul]);
if ($result->rowCount() > 0) {
$row = $result->fetch();
echo $row['name'];
} else {
echo "Empty results";
}
$query = "
INSERT INTO `table` (
`id`,
`title`
) VALUES (
NULL,
:title
);
";
$params = array(
':title' => $title,
);
DB::query($query, $params);
INSERT INTO
`table`
SET
`field1` = :field1,
`field2` = :field2
ON DUPLICATE KEY UPDATE
`field2` = VALUES(`field2`)
$menu = DB::table('table')
->fields('table.id, table.name, table_parent.name as parent')
->limit(2, 2)
->order('table.id');
$menu->join('table', 'table_parent.id', 'table.parent_id', null, 'table_parent');
$menu->where('table.articul', '', '<>');
$products = $menu->exec();
Установка таблицы
$query = DB::table('table');
Назначаем поля таблицы
$query->fields('table.field1, table.field2');
$query->join('table', 'table.id', 'table.parent_id', null, 'table_alias');
Аналогичен join
.
$query->where('table.title', '', '<>');
$query->whereRaw('id = :id');
Сортировка по полю $field
с направлением $direction
$query->order('id');
Выбор $limit
записей начиная от $from
$query->limit(10);
Выполнение подготовленного запроса
$products = $query->exec();