mirror of
https://github.com/avecms/AVE.cms.git
synced 2026-08-01 00:45:44 +00:00
3.9 KiB
3.9 KiB
Запросы
Все запросы идут через DB::query() (или его варианты). Первый аргумент — SQL с
плейсхолдерами, далее — значения.
DB::query(...) → DB_Result
Базовый метод. Возвращает объект DB_Result, с которого читают данные.
$res = DB::query('SELECT * FROM ' . $t . ' WHERE rubric_id = %i', 5);
$rows = $res->getAll(); // все строки
$one = DB::query('SELECT * FROM ' . $t . ' WHERE Id = %i', 42)->getAssoc();
Варианты, возвращающие сразу массив
Эти методы сами извлекают данные — ->getAll() вызывать не нужно.
| Метод | Возвращает |
|---|---|
queryAssoc(...) |
Массив ассоциативных строк. |
queryObjects(...) |
Массив объектов ($row->field). |
queryAllLists(...) |
Массив числовых массивов (строки как списки). |
queryFullColumns(...) |
Ассоц. строки с ключами вида table.column (при JOIN одноимённых полей). |
queryOneColumn($column = null, ...) |
Плоский массив значений одного столбца (по умолчанию — первого). |
queryFirstColumn(...) |
Плоский массив значений первого столбца. |
// плоский список id
$ids = DB::queryOneColumn('Id', 'SELECT Id FROM ' . $t . ' WHERE rubric_id = %i', 5);
// [1, 2, 3, ...]
// список объектов
$rows = DB::queryObjects('SELECT * FROM ' . $t . ' LIMIT 10');
echo $rows[0]->document_title;
// колонки таблицы
$cols = DB::columnList($t); // ['Id', 'document_title', ...]
Сырые и небуферизованные
| Метод | Особенность |
|---|---|
queryRaw(...) |
Буферизованный «сырой» результат (DB_Result). |
queryRawUnbuf(...) |
Небуферизованный — для очень больших выборок, читаемых потоково. |
$res = DB::queryRawUnbuf('SELECT * FROM huge_table');
while ($row = $res->getAssoc()) { /* обрабатываем по одной строке */ }
Служебные сведения после запроса
DB::insertId(); // ID последней вставки (или DB::$insert_id)
DB::affectedRows(); // затронуто строк последним запросом
DB::numRows(); // строк в последней выборке
DB::numAllRows(); // строк без учёта LIMIT (SELECT FOUND_ROWS())
DB::getTables($like); // список таблиц (опц. LIKE)
DB::columnList($t); // список колонок таблицы
Отладка запросов
DB::debugQuery('... %i ...', 5); // во что развернётся запрос (без выполнения)
DB::getLastQuery(); // последний выполненный SQL
DB::getQueries(); // все запросы за запрос-цикл
DB::getDebugReport(); // HTML-отчёт (время, количество)
DB::getCaller(); // где был вызван запрос
// быстро подсмотреть последний SQL при отладке
Debug::echo(DB::getLastQuery());
Пагинация с общим числом строк
$rows = DB::query(
'SELECT SQL_CALC_FOUND_ROWS * FROM ' . $t . ' WHERE rubric_id = %i LIMIT %i, %i',
$rubricId, $offset, $limit
)->getAll() ?: array();
$total = DB::numAllRows(); // всего строк без LIMIT