Предполагая, что ваша база данных поддерживает транзакции (mysql с InnoDB, Postgres и т. Д.), Тогда простое завершение рассматриваемой операции в транзакции решит проблему. Если один экземпляр сценария находится в середине транзакции, когда второй сценарий пытается его запустить, то изменения базы данных второго сценария будут поставлены в очередь и не будут предприниматься до тех пор, пока первая транзакция не завершится. Это означает, что база данных всегда будет в допустимом состоянии, если логика запуска и принятия транзакции реализована правильно.
if ($inTransaction = $pdo -> beginTransaction ())
{
// Do your selects and updates here. Try to keep this section as short as possible though, as you don't want to keep other pending transactions waiting
if ($condition_for_success_met)
{
$pdo -> commit ();
}
else
{
$pdo -> rollback ();
}
}
else
{
// Couldn't start a transaction. Handle error here
}