zyxus / db
PHP Wrapper for MySQL PDO
Requires
- php: >=5.6.0
- ext-pdo: *
This package is auto-updated.
Last update: 2024-04-16 03:01:44 UTC
README
Небольшой класс оберкта для PDO. Был разработан для служебных нужд, с целью облегчения перехода на PDO. Конструктор запросов расширяет функционал использования PDO.
Установка
Установка через Composer.
$ composer require zyxus/db
Оглавление
Использование
DB::query()
Возвращает результат true
- если запрос выполнен, false
- если запрос ничего не вернул.
В случае ошибки выбрасывается исключение и выводится скрипт и строка ошибки и описание ошибки.
bool DB::query($query);
rowCount()
Возвращает количество обработанных запросом строк
$count = DB::query($query)->rowCount();
fetch()
Возвращает 1 строку с результатом запроса
$count = DB::query($query)->fetch();
fetchAll()
Возвращает все строки с результатами запроса
$count = DB::query($query)->fetch();
lastInsertId()
Возвращает последний вставленный запросом id
$count = DB::instance()->lastInsertId();
Подготовленные выражения (prepared statements)
Использование prepared statements укрепляет защиту от SQL-инъекций.
Prepared statement — это заранее скомпилированное SQL-выражение, которое может быть многократно выполнено путем отправки серверу лишь различных наборов данных. Дополнительным преимуществом является невозможность провести SQL-инъекцию через данные, используемые в placeholder’ах.
Безымянные placeholder’ы (?)
$query = "SELECT `field1`, `field2` FROM `table` WHERE `id` = ? AND `field3` = ?"; $params = [100, 'Y']; $data = DB::query($query, params)->fetch();
Именные placeholder’ы (:placeholder_name)
$query = "SELECT `field1`, `field2` FROM `table` WHERE `id` = :id AND `field3` = :field3"; $params = [ ':id' => 100, ':field3' => 'Y', ]; $data = DB::query($query, params)->fetch();
Выборка результатов запроса SELECT
Выбор одной строки 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();
Выбор варианта возвращаемых индексов FETCH_STYLE
Выборка ассоциативного массива данных
$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"; }
Вставка строки в таблицу INSERT
$query = " INSERT INTO `table` ( `id`, `title` ) VALUES ( NULL, :title ); "; $params = array( ':title' => $title, ); DB::query($query, $params);
Синтаксис INSERT ON DUPLICATE KEY UPDATE
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();
table($table)
Установка таблицы
$query = DB::table('table');
fields($fields)
Назначаем поля таблицы
$query->fields('table.field1, table.field2');
join($table, $field1, $field2, $condition = ' = ', $alias = '')
$query->join('table', 'table.id', 'table.parent_id', null, 'table_alias');
innerJoin($table, $field1, $field2, $condition = ' = ', $alias = '')
Аналогичен join
.
where($field, $value, $condition = ' = ', $combine_condition = 'AND')
$query->where('table.title', '', '<>');
whereRaw($where)
$query->whereRaw('id = :id');
order($field, $direction = 'ASC')
Сортировка по полю $field
с направлением $direction
$query->order('id');
limit($limit, $from = '0')
Выбор $limit
записей начиная от $from
$query->limit(10);
exec()
Выполнение подготовленного запроса
$products = $query->exec();