cry / cry-cms-db
class for mysql with pdo
Requires
- ext-mbstring: *
- ext-pdo: *
README
Класс для работы с MySQL через PDO. Позволяет как писать запросы руками, так и через цепочку методов.
Представляет собой singleton с методами обертками.
Имеет встроенный лог и фиксацией времени выполнения.
Настройка
Db::config([ 'host' => 'localhost', 'user' => 'test', 'password' => 'test', 'database' => 'test', ]);
Включение Debug режима
Db::debug(true);
Есть два типа синтаксиса
Через прямой SQL запрос
Db::sql()->query('query', [])->exec(); Db::sql()->query('query', [])->getOne(); Db::sql()->query('query', [])->getAll();
Через билдер
$result = Db::table('table')->getOne(); $result = Db::table('table')->getAll();
Примеры
Создание таблиц
Db::table('table')->create([ 'id' => 'INT(10) UNSIGNED NOT NULL AUTO_INCREMENT PRIMARY KEY', 'name' => 'VARCHAR(255)', 'date' => 'DATETIME', ], 'ENGINE=MyISAM DEFAULT CHARSET=utf8mb4 COMMENT="TEST"');
Добавление индекса
Db::table('table')->index(['id', 'date'], 'UNIQUE');
Очистка таблицы
Db::table('table')->truncate();
Удаление таблицы
Db::table('table')->drop();
Получение списка столбцов в таблице
Db::table('table')->fields();
Лог запросов (только debug=true)
$log = Db::getLog();
Получить результирующий запрос
getOne() or getAll() change to getSQL()
Добавить запись в таблицу
Db::table('table')->insert([ 'name' => 'first', 'date' => date('Y-m-d'), ]);
Получить autoincrement добавленной записи
$id = Db::lastInsertId();
Получение одной записи - вариант 1
$one = Db::table('table') ->select(['id', 'name', 'date']) ->where(['id = :id']) ->values(['id' => $id]) ->getOne();
Получение одной записи - вариант 2
$one = Db::table('table') ->select(['id', 'name', 'date']) ->where(['id' => 1]) ->getOne();
Получение нескольких записей
$all = Db::table('table', 't') ->select(['t.id', 'td.field_1', 'td.field_2']) ->calcRows() ->leftJoin('testData', 'td', 'td.test_id = t.id') ->where(['t.date <= :date']) ->values(['date' => date('Y-m-d')]) ->offset(0) ->limit(5) ->groupBy(['t.id']) ->orderBy(['t.id' => 'DESC']) ->getAll();
Получение количества записей (только с calcRows)
$count = Db::getFoundRows();
Изменение - вариант 1
Db::table('table')->update([ 'name' => 'NAME2' ], [ 'id' => $id ]);
Изменение - вариант 2
Db::table('table')->update([ 'name' => 'NAME3', ], [ 'id = :id', // array of SQL with placeholders ], [ 'id' => $id, ]);
Удаление - вариант 1
Db::table('table')->delete([ 'id' => $id ]);
Удаление - вариант 2
Db::table('test')->delete([ 'date <= :date', // array of SQL with placeholders ], [ 'date' => date('Y-m-d') ]);
Новый инстанс с отдельным подключением
use CryCMS\Db; class Db2 extends Db { protected static $config; protected static $dbh; protected static $debug = false; protected static $log = []; } Db2::config( [ 'host' => '', 'user' => '', 'password' => '', 'database' => '', ] );