php_db_components_pack/sources/traits/Database/DatabaseTransactions.php
2025-07-29 17:50:57 +03:00

98 lines
4.2 KiB
PHP
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

<?php
/**
* @noinspection SqlNoDataSourceInspection
*/
namespace goodboyalex\php_db_components_pack\traits\Database;
use PDO;
use PDOException;
/**
* Трейт для работы с транзакциями базы данных.
*
* @author Александр Бабаев
* @package php_components_pack
* @version 1.0
* @since 1.0
* @see PDO
*/
trait DatabaseTransactions
{
/**
* Начинает транзакцию.
*
* @return void
* @throws PDOException Если транзакция уже начата или не удалось начать.
*/
public function InitTransaction (): void
{
// Проверка, не находится ли текущая транзакция в процессе.
if ($this->InTransaction())
// - если находится, то выбрасываем исключение.
throw new PDOException("Транзакция уже начата! / Transaction already started!");
// Начинаем транзакцию
$isSuccess = $this->DataBaseHandle->beginTransaction();
// Если транзакция не началась
if (!$isSuccess)
// - то выбрасываем исключение.
throw new PDOException("Ошибка при начале транзакции! / Transaction start error!");
}
/**
* Проверяет, находится ли текущая транзакция в процессе.
*
* @return bool Результат проверки: <code>true</code> - в процессе, <code>false</code> - нет.
*/
public function InTransaction (): bool
{
return $this->DataBaseHandle->inTransaction();
}
/**
* Отправляет транзакцию в базу данных.
*
* @return void
* @throws PDOException Если транзакция не начата или не отправлена.
*/
public function Commit (): void
{
// Проверка, не находится ли текущая транзакция в процессе
if (!$this->InTransaction())
// - если нет, то выбрасываем исключение.
throw new PDOException("Транзакция не начата! / Transaction not started!");
// Отправляем транзакцию в базу данных
$isSuccess = $this->DataBaseHandle->commit();
// Если транзакция не отправлена
if (!$isSuccess)
// - то выбрасываем исключение.
throw new PDOException("Ошибка при отправке транзакции в базу данных! / Transaction send error!");
}
/**
* Откатывает транзакцию.
*
* @return void
* @throws PDOException Если транзакция не начата или не откатана.
*/
public function RollBack (): void
{
// Проверка, не находится ли текущая транзакция в процессе
if (!$this->InTransaction())
// - если нет, то выбрасываем исключение.
throw new PDOException("Транзакция не начата! / Transaction not started!");
// Откатываем транзакцию
$isSuccess = $this->DataBaseHandle->rollBack();
// Если транзакция не откатана
if (!$isSuccess)
// - то выбрасываем исключение.
throw new PDOException("Ошибка при откате транзакции! / Transaction rollback error!");
}
}