在PHP中,我使用PDO与数据库交互。通常发生的一个过程包括多个查询(几个SELECT和UPDATE)。这在大多数情况下都是有效的,但偶尔当过程的两个(或更多)实例同时运行时,数据会损坏。
解决此问题的最佳方法是什么?理想情况下,我希望与大多数PDO驱动程序的解决方案。
发布于 2011-06-22 17:26:23
假设您的数据库后端支持事务(带有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
}https://stackoverflow.com/questions/6434328
复制相似问题