WARNING! This library is currently under development and may not be stable. Use in your services at your own risk.
PHP application-level database locking mechanisms to implement concurrency control patterns.
Supported drivers:
- Postgres — PostgreSQL Advisory Locks Documentation
Pull in the package through Composer.
composer require cybercog/php-db-locker$dbConnection = new PDO($dsn, $username, $password);
$locker = new \Cog\DbLocker\Locker\PostgresAdvisoryLocker();
$lockId = \Cog\DbLocker\LockId\PostgresLockId::fromKeyValue('user', '4');
$dbConnection->beginTransaction();
$isLockAcquired = $locker->acquireTransactionLevelLock(
$dbConnection,
$lockId,
\Cog\DbLocker\Locker\PostgresAdvisoryLockLevelEnum::Transaction,
\Cog\DbLocker\Locker\PostgresAdvisoryLockWaitModeEnum::NonBlocking,
\Cog\DbLocker\Locker\PostgresLockAccessModeEnum::Exclusive,
);
if ($isLockAcquired) {
// Execute logic if lock was successful
} else {
// Execute logic if lock acquisition has been failed
}
$dbConnection->commit();$dbConnection = new PDO($dsn, $username, $password);
$locker = new \Cog\DbLocker\Locker\PostgresAdvisoryLocker();
$lockId = \Cog\DbLocker\LockId\PostgresLockId::fromKeyValue('user', '4');
$isLockAcquired = $locker->acquireSessionLevelLock(
$dbConnection,
$lockId,
\Cog\DbLocker\Locker\PostgresAdvisoryLockLevelEnum::Session,
\Cog\DbLocker\Locker\PostgresAdvisoryLockWaitModeEnum::NonBlocking,
\Cog\DbLocker\Locker\PostgresLockAccessModeEnum::Exclusive,
);
if ($isLockAcquired) {
// Execute logic if lock was successful
} else {
// Execute logic if lock acquisition has been failed
}
$locker->releaseSessionLevelLock($dbConnection, $lockId);Detailed changes for each release are documented in the CHANGELOG.md.
PHP DB Lockerpackage is open-sourced software licensed under the MIT license by Anton Komarev.
CyberCog is a Social Unity of enthusiasts. Research the best solutions in product & software development is our passion.

