2011-12-08 116 views
1

如果我使用PDO事务,是否需要锁定表?PDO交易?

如果用户a有50个钱并将50转移给用户b,那么PDO交易是否确保他们都能正常执行?

此外,如果说我有一个if语句一样,

if ($user['money'] > 500) { 
    $dbc ->beginTransaction(); 
    ......... 
    $dbc ->commit(); 
} 

我怎样才能确保在交易运行的用户的钱不会改变意味着查询不能运行,值?? 谢谢

回答

1

交易过程由SQL服务器保证。如果beginTransaction()成功,commit()成功并且您的SQL服务器和表支持事务,那么您可以确定它。

1

PDO是一个抽象层,因此它取决于您的数据库。 MySQL支持事务,但仅支持InnoDB表。否则只有表锁(这是不一样的)。 SQLite总是支持事务。另一个数据库可能从不

交易仍然需要您(开发人员)创建和验证逻辑。数据库不知道什么是正确的(正确的,不只是)和错误的(错误的)。你这样做,所以你必须创建一个脚本,在适当的时候调用BEGIN和COMMIT/ROLLBACK。

另外值得注意的是:事务在数据库错误后不会自动ROLLBACKed。 (也许有些数据库或DBAL可以,但它不是标准的,你不应该依赖它。)这意味着你必须检查每个查询的结果/响应/反馈并适当地采取行动(例如通过调用ROLLBACK)。