我在做一个web应用程序,他们会在多个用户相互交融和读/对决策/修改共享数据。
我读过的事务是原子的,这正是我所需要的。 但是,我不知道它如何与PHP工作PDO::beginTransaction()
我的意思是原子在如果交易被编辑了一些数据,所有其他事务也修改/读取数据将需要等待,直到第一个事务完成。 就像我不希望两个脚本读取值,增加旧人,并有效地只存储一个增量。 第二个脚本应该等待第一个完成。
在几乎所有的例子我见过的查询连续使用(例如PHP + MySQL的交易的例子 )。 很多我在做什么要求
- 查询和取
- 检查数据,并作用于它,因为同一事务的一部分
- 将交易仍原子的工作,如果有查询之间的PHP代码?
- 我知道你应该准备的事务之外的语句,但它是还好里面准备了吗? 基本上,我担心PHP活动破坏事务的原子性。
下面是一个例子(这个不需要检查以前的值)。 我有邮件存储作为一个序列化数组一个非常基本的收件箱系统(如果有人有更好的建议,请让我知道)。 所以,我查询它,追加新的消息,并将其存储。 它会按预期工作?
$getMail = $con->prepare('SELECT messages FROM inboxes WHERE id=?');
$storeMail = $con->prepare('UPDATE inboxes SET messages=? WHERE id=?');
$con->beginTransaction();
$getMail->execute(array($recipientID));
$result = $getMail->fetch();
$result = unserialize($result[0]);
$result[] = $msg;
$storeMail->execute(array(serialize($result), $recipientID));
$con->commit();