This commit is contained in:
2025-07-29 17:50:57 +03:00
parent e4c8d7e6c8
commit 8436569ce5
9 changed files with 1223 additions and 839 deletions

View File

@@ -0,0 +1,182 @@
<?php
/**
* @noinspection SqlNoDataSourceInspection
*/
namespace goodboyalex\php_db_components_pack\traits\Database;
use PDO;
use PDOException;
/**
* Трейт для работы с запросами к базе данных типа Query и Execute.
*
* @author Александр Бабаев
* @package php_components_pack
* @version 1.0
* @since 1.0
* @see PDO
*/
trait DatabaseQueryExecute
{
/**
* Запрос строк из базы данных.
*
* @param string $query Запрос
* @param array $params Параметры запроса
*
* @return false|array Ассоциированный массив с результатом запроса или false в случае ошибки
*/
public function Query (string $query, array $params = []): false|array
{
// По умолчанию, результат пуст
$result = false;
try {
// Подготавливаю запрос
$STH = $this->DataBaseHandle->prepare($query, [PDO::ATTR_CURSOR => PDO::CURSOR_FWDONLY]);
// Выполняю запрос
$STH->execute($params);
// Указываю, что данные, которые я хочу получить, должны быть в ассоциативном массиве
$STH->setFetchMode(PDO::FETCH_ASSOC);
// Получаю все данные
$result = $STH->fetchAll();
}
catch (PDOException $e) {
$this->HandleException($e);
}
// Вывожу результат
return $result;
}
/**
* Выполняем запрос на получение одной строки (аналог QueryFirst)
*
* @param string $query Запрос
* @param array $params Параметры запроса
*
* @return false|array Строка в формате массива или false в случае ошибки
*
* @see Query
* @see QueryFirst
* @see QueryLast
* @see GetRow
*/
public function QueryScalar (string $query, array $params = []): false|array
{
return $this->QueryFirst($query, $params);
}
/**
* Выполняем запрос на получение первой строки
*
* @param string $query Запрос
* @param array $params Параметры запроса
*
* @return false|array Строка в формате массива или false в случае ошибки
*
* @see Query
* @see QueryLast
* @see QueryScalar
*/
public function QueryFirst (string $query, array $params = []): false|array
{
// Выполняю запрос
$result = $this->Query($query, $params);
// Если в результате запроса получили ошибку или количество строк = 0
if ($result === false || count($result) == 0)
// - то возвращаем ошибку
return false;
// Получаю первый ключ массива
$firstKey = array_key_first($result);
// Возвращаем первую строку
return $result[$firstKey];
}
/**
* Выполняем запрос на получение последней строки
*
* @param string $query Запрос
* @param array $params Параметры запроса
*
* @return false|array Строка в формате массива или false в случае ошибки
*
* @see Query
* @see QueryFirst
* @see QueryScalar
*/
public function QueryLast (string $query, array $params = []): false|array
{
// Выполняю запрос
$result = $this->Query($query, $params);
// Если в результате запроса получили ошибку или количество строк = 0
if ($result === false || count($result) == 0)
// - то возвращаем ошибку
return false;
// Получаю последний ключ массива
$lastKey = array_key_last($result);
// Возвращаем первую строку
return $result[$lastKey];
}
/**
* Выполнение запроса. Обычно используется для операций,
* которые не возвращают никаких данных, кроме количества
* затронутых ими записей. Например,
*
* <code>$db->Execute('DELETE FROM table WHERE id=1');</code>
*
* @param string $query Запрос
* @param array $params Параметры запроса
*
* @return int|false Количество затронутых строк или false в случае ошибки
*/
public function Execute (string $query, array $params = []): int|false
{
// По умолчанию результат false
$result = false;
try {
// Если параметры не заданы
if (count($params) == 0) {
// - то выполняю запрос
$result = $this->DataBaseHandle->exec($query);
}
else {
// - в противном случае
// -- подготавливаю запрос
$STH = $this->DataBaseHandle->prepare($query, [PDO::ATTR_CURSOR => PDO::CURSOR_FWDONLY]);
// -- выполняю запрос
$opResult = $STH->execute($params);
// -- и если выполнение успешное,
if ($opResult)
// --- то в результат пойдёт количество строк
$result = $STH->rowCount();
}
}
catch (PDOException $e) {
$this->HandleException($e);
}
// Если в результате false
if ($result === false)
// - то возвращаю его
return false;
// Возвращаю результат
return $result;
}
}