This commit is contained in:
2025-08-07 18:06:55 +03:00
parent eeea57209e
commit d132832d28
34 changed files with 1231 additions and 286 deletions

View File

@@ -0,0 +1,158 @@
# Класс `Condition`
Класс `Condition` предназначен для представления условий, используемых в запросах к базе данных. Он позволяет построить
выражения для фильтрации данных на основе логических операторов и критериев.
## Пространство имён
```php
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. Конструктор
**Назначение**: Создать объект условия с заданием имени колонки, оператора и значения.
**Синтаксис**:
```php
public function __construct (
string $columnName = "",
string $operator = "=",
mixed $value = null
);
```
**Описание**:
- **$columnName**: Имя колонки, к которой применяется условие ИЛИ условие (подробнее читайте далее в пункте про
`FUNC:`).
- **$operator**: Оператор сравнения (например, `=`, `<>`, `<`, `>`, `LIKE`, etc.). Стандартное значение — `=` (
равенство).
- **$value**: Значение, с которым производится сравнение ИЛИ результат вычисления функции (подробнее читайте далее в
пункте про `FUNC:`).
**Пример использования**:
```php
$condition = new Condition('age', '>', 18);
```
#### Задание условий с помощью функции (`FUNC:`)
Если в имени колонки передаётся какая-либо функция (начинать такую функцию следует с `FUNC:`), то при обработке она
не обрабатывается как столбец. Это же касается и значения.
Например, давайте добавим условие, что каждое новое имя пользователя начинается с заглавной буквы
```php
use goodboyalex\php_db_components_pack\classes\Condition;
$condition = new Condition('FUNC:SUBSTR(name, 1, 1)', "=", 'FUNC:UPPER(SUBSTR(name, 1, 1))
```
в результате запрос будет содержать:
```sql
SUBSTR(name, 1, 1) = UPPER(SUBSTR(name, 1, 1)
```
### 2. Метод `Parse`
**Назначение**: Разобрать условие, заданное в виде массива, и возвратить объект `Condition`.
**Синтаксис**:
```php
public static function Parse(array $condition): Condition;
```
**Описание**:
- **$condition**: Массив, содержащий три элемента: имя колонки, оператор и значение.
- Метод преобразует массив в полноценный объект `Condition`.
**Пример использования**:
```php
$parsedCondition = Condition::Parse(['age', '>', 18]);
```
### 3. Метод `Get`
**Назначение**: Сформировать условие для SQL-запроса с защитой от SQL-инъекций.
**Синтаксис**:
```php
public function Get(int $index = 0): Tuple;
```
**Описание**:
- **$index**: Индексация для замены переменных (для предотвращения SQL-инъекций).
- Метод возвращает кортеж (tuple), состоящий из двух частей:
- SQL-строку с замещаемым параметром (`:paramX`), где X — номер индекса.
- Массив с параметрами для последующего внедрения в запрос.
**Пример использования**:
```php
[$sqlPart, $params] = $condition->Get();
// $sqlPart будет выглядеть примерно так: "`age` > :param0"
// $params будет содержать массив с фактическим значением: ["param0" => 18]
```
## Пример использования
```php
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-запросов. Он активно используется в условиях запросов к базе данных, позволяя разработчику
сосредоточиться на логике приложения, а не на технических аспектах формирования запросов.
[На главную](../../index.md)