PDO和多重查询/并发问题

| 在PHP中,我使用PDO与数据库进行交互。通常发生的一种过程由多个查询(几个SELECT和UPDATE)组成。这在大多数情况下都有效,但是有时在两个(或多个)过程实例同时运行的地方数据会损坏。 解决此问题的最佳方法是什么?理想情况下,我想要一个适用于大多数PDO驱动程序的解决方案。     
已邀请:
        假设您的数据库后端支持事务(带有InnoDB的MySQL,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
}
    

要回复问题请先登录注册