所以,让我们说我同时使用两个驱动程序(在特定的mysql和sqlite3中)
我有一组更改,只有当两个dbms都没有失败时才必须在两个连接上进行commit(),或者如果一个或另一个失败,则必须对rollBack()进行修改:
<?php
interface DBList
{
function addPDO(PDO $connection);
// calls ->rollBack() on all the pdo instances
function rollBack();
// calls ->commit() on all the pdo instances
function commit();
// calls ->beginTransaction() on all the pdo instances
function beginTransaction();
}
问题是:它真的有效吗?它有意义吗?
&#34;为什么不只使用mysql?&#34;你会说!我不是受虐狂!通过我的应用程序,我需要mysql来获得经典的结果,但是我还需要保留一个总是同步的表的副本,这个表也可以下载和移植!
提前多多谢谢你!
答案 0 :(得分:1)
我怀疑你把车放在马前!如果
然后事务也将在第二个DB上成功提交。
所以你想要做的是: - 在MySQL上启动事务 - 记录所有数据更改SQL(参见后面) - 在MySQL上提交事务 - 如果提交有效,则针对SQlite运行记录的SQL - 如果没有,请回滚MySQL
警告:如果两个数据库上的事务序列相同,则上述假设仅有效。因此,您可能希望将SQL记录到MySQL表中,该表与其他表一样具有相同的事务逻辑。这使序列化适合您。
答案 1 :(得分:0)
您将PDO误认为是数据库服务器。 PDO只是一个接口,非常类似于数据库控制台。它不执行自己的任何数据操作。它无法插入或选择数据。它无法执行数据锁定或事务。它所能做的只是将命令发送到数据库服务器并带回结果(如果有的话)。它只是一个界面。它没有自己的交易。
因此,您可以使用常规交易,而不是这种虚构的跨司机交易。
启动两个,每个驱动程序一个,然后相应地回滚它们。顺便说一句,使用PDO,不必手动回滚。只需在异常模式下设置PDO,编写查询并在结尾添加提交。如果其中一个查询失败,由于脚本终止,所有已启动的事务将自动回滚。