6.6 KiB
Класс Condition
Класс Condition
предназначен для представления условий, используемых в запросах к базе данных. Он позволяет построить
выражения для фильтрации данных на основе логических операторов и критериев.
Пространство имён
namespace goodboyalex\php_db_components_pack;
Автор и версия
- Автор: Александр Бабаев
- Версия: 1.0
- Дата начала поддержки: с версии 1.0
Назначение
Класс Condition
предназначен для создания и представления условий, используемых в SQL-запросах. Он позволяет задавать
критерии фильтрации, объединять их логическими операторами и формировать готовые SQL-выражения для безопасного
исполнения запросов.
Реализуемые интерфейсы
Класс Condition
реализует интерфейс IArrayable
.
Логические операторы
Класс предоставляет ряд постоянных, определяющих логические операторы, которые могут быть использованы при формировании условий:
LOGIC_AND
(«И», AND)LOGIC_OR
(«ИЛИ», OR)LOGIC_NOT
(«НЕ», NOT)LOGIC_XOR
(«Исключающее ИЛИ», XOR)LOGIC_NAND
(«Нелогичное И», NAND)LOGIC_NOR
(«Нелогичное ИЛИ», NOR)
Методы класса
1. Конструктор
Назначение: Создать объект условия с заданием имени колонки, оператора и значения.
Синтаксис:
public function __construct (
string $columnName = "",
string $operator = "=",
mixed $value = null
);
Описание:
- $columnName: Имя колонки, к которой применяется условие ИЛИ условие (подробнее читайте далее в пункте про
FUNC:
). - $operator: Оператор сравнения (например,
=
,<>
,<
,>
,LIKE
, etc.). Стандартное значение —=
( равенство). - $value: Значение, с которым производится сравнение ИЛИ результат вычисления функции (подробнее читайте далее в
пункте про
FUNC:
).
Пример использования:
$condition = new Condition('age', '>', 18);
Задание условий с помощью функции (FUNC:
)
Если в имени колонки передаётся какая-либо функция (начинать такую функцию следует с FUNC:
), то при обработке она
не обрабатывается как столбец. Это же касается и значения.
Например, давайте добавим условие, что каждое новое имя пользователя начинается с заглавной буквы
use goodboyalex\php_db_components_pack\classes\Condition;
$condition = new Condition('FUNC:SUBSTR(name, 1, 1)', "=", 'FUNC:UPPER(SUBSTR(name, 1, 1))
в результате запрос будет содержать:
SUBSTR(name, 1, 1) = UPPER(SUBSTR(name, 1, 1)
2. Метод Parse
Назначение: Разобрать условие, заданное в виде массива, и возвратить объект Condition
.
Синтаксис:
public static function Parse(array $condition): Condition;
Описание:
- $condition: Массив, содержащий три элемента: имя колонки, оператор и значение.
- Метод преобразует массив в полноценный объект
Condition
.
Пример использования:
$parsedCondition = Condition::Parse(['age', '>', 18]);
3. Метод Get
Назначение: Сформировать условие для SQL-запроса с защитой от SQL-инъекций.
Синтаксис:
public function Get(int $index = 0): Tuple;
Описание:
- $index: Индексация для замены переменных (для предотвращения SQL-инъекций).
- Метод возвращает кортеж (tuple), состоящий из двух частей:
- SQL-строку с замещаемым параметром (
:paramX
), где X — номер индекса. - Массив с параметрами для последующего внедрения в запрос.
- SQL-строку с замещаемым параметром (
Пример использования:
[$sqlPart, $params] = $condition->Get();
// $sqlPart будет выглядеть примерно так: "`age` > :param0"
// $params будет содержать массив с фактическим значением: ["param0" => 18]
Пример использования
use goodboyalex\php_db_components_pack\Condition;
// Создаём условие для поиска пользователей по возрасту
$condition = new Condition('age', '>', 18);
// Формируем условие для использования в SQL-запросе
list($sql, $parameters) = $condition->Get();
// Теперь можем использовать $sql и $parameters в запросе
$query = "SELECT * FROM users WHERE $sql";
$stmt = $pdo->prepare($query);
$stmt->execute($parameters);
Принцип работы
Класс Condition
помогает избежать распространенных уязвимостей, таких как SQL-инъекции, предлагая безопасный способ
формирования условий для SQL-запросов. Он активно используется в условиях запросов к базе данных, позволяя разработчику
сосредоточиться на логике приложения, а не на технических аспектах формирования запросов.