Документация/Контейнер/Сервисы/DB

Сервис DB — использование баз данных

Сервис DB — это начальная возможность отправки запросов к базам данных. При помощи обёртки над PDO и конфигурации фреймворка HLEB2 для баз данных, сервис предоставляет простые методы обращения к различным БД (поддерживаемых PDO).

Для работы этого сервиса необходимо включенное расширение PHP PDO и необходимые драйверы БД.

Для использования иного способа соединения, например, ORM(Object-Relational Mapping), добавьте создание объекта выбранной ORM как сервис контейнера с настройками из конфигурации фреймворка.

Согласно заявленной структуре проекта, поставляемой с фреймворком HLEB2, сервис DB можно использовать только в классах Моделей.
Класс Модели (шаблон которого можно создать консольной командой) представляет собой базовый каркас для использования в составе MVC (Action-Domain-Responder для веб). Его можно преобразовать или заменить по своему усмотрению для выбранной библиотеки AR(Active Record) или ORM (а затем изменить шаблон для консольной команды).

Примеры использования в Модели для обращения к базе данных:

<?php
// File /app/Models/ExampleModel.php

namespace App\Models;

use 
Hleb\Base\Model;
use 
Hleb\Reference\DbInterface;
use 
Hleb\Static\DB;

class 
ExampleModel extends Model
{
    public static function 
get(): false|array
    {
        
$query '"SELECT * FROM table_name WHERE active=1';

        
// variant 1
        
$data self::container()->get(DbInterface::class)->dbQuery($query);

        
// variant 2
        
$data self::container()->db()->dbQuery($query);

        
// variant 3
        
$data DB::dbQuery($query);

        return 
$data;
    }
}

Для выполнения запросов к базе данных используются следующие методы сервиса DB.


#dbQuery()

Метод dbQuery() использовался в приведённых выше примерах для создания прямого SQL-запроса в базу данных. В нём запрос и параметры запроса не разделены, поэтому необходимо обрабатывать (с правильным экранированием) каждый сомнительный параметр, а особенно пришедший из Request, с помощью специального метода quote().

use Hleb\Static\DB;

$result DB::dbQuery(sprintf("SELECT * FROM users WHERE name='%s' AND address='%s'"DB::quote($name), DB::quote($address)));

Экранирование параметров запроса позволяет избавить запрос от SQL-инъекций. Такого рода атаки основаны на внедрении в запрос произвольного SQL-выражения как части внешних данных.

Другой метод сервиса DB более универсален и позволяет упростить обработку параметров.


#run()

При успешном выполнении метод run() возвращает инициализированный объект PDOStatement. Все методы этого объекта, такие как fetch() и fetchColumn(), стандартные для PDO.

use Hleb\Static\DB;

$result DB::run("SELECT * FROM users WHERE name=? AND address=?", [$name$address])->fetchAll();

Возможности PDOStatement описаны в документации PDO.


#Асинхронные запросы

Для асинхронных запросов использование этого сервиса аналогично и зависит от настроек используемого веб-сервера.

Кроме того, некоторые ORM адаптированы к такому режиму работы.

Одной из таких библиотек, согласно её документации, является Cycle ORM.

Path Сессии

Страница создана: @fomiash
К началу страницы