php - 一起运行模型

标签 php mysql model pdo dao

应用每个单独的模型,无法回滚或阻止任何插入运行
MODEL_A: MODEL_B 插入即使射击 Exception
MODEL_B:MODEL_A插入即使射击 Exception

$ MODEL_A-> insert();
$ MODEL_B-> insert();



//模型.A

try {
    $statement = $pdo-> prepare( "INSERT INTO ..." );
    $statement-> execute();
}catch{}



//模型.B

try {
    $statement = $pdo-> prepare( "INSERT INTO ..." );
    $statement-> execute();
}catch{}



//程序化是一个简单的解决方法

try {
    #beginTransaction;
    $statement = $pdo-> prepare( "INSERT INTO ..." );
    $statement-> execute();

    $statement = $pdo-> prepare( "INSERT INTO ..." );
    $statement-> execute();
    #commit;
}catch{}

如果第一次插入插入,第二次触发错误,不必像第一次回滚
在执行操作之前都需要进行测试
有人对如何解决这个问题有任何建议吗?

谢谢

最佳答案

您需要通过关闭自动提交来显式启动事务,然后在完成测试后提交或回滚事务。您可以使用 beginTransaction() 通过 PDO 来执行此操作, commit() ,和 rollback()功能。

如果插入位于不同的类中,您可以传递对 $pdo 对象的引用。

class ModelA {
    function insert(&$pdo){
        $statement = $pdo->prepare( "INSERT INTO ..." );
        $statement->execute();
    }
}

class ModelB {
    function insert(&$pdo){
        $statement = $pdo->prepare( "INSERT INTO ..." );
        $statement->execute();
    }
}

您的代码将如下所示:

// disable autocommit
$pdo->beginTransaction(); 

$modelA = new ModelA();
$modelA->insert($pdo);

$modelB = new ModelB();
$modelB->insert($pdo);

// check for errors, and either commit() or rollback()
$hasErrors = ? // Add your code to check for errors
if ($hasErrors){
    $pdo->rollback();
} else {
    $pdo->commit();
}

关于php - 一起运行模型,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15608605/

相关文章:

php - 查找哪一个 WHERE 子句成功

php - 使用 Joomla MVC 更新 MySQL 表行,

SQL:从 varchar 转换为 datetime 并比较

java - 创建用于运行报告的 DropWizard 微服务。

ruby-on-rails - Rails 3 - 验证两个字段之一已完成

javascript - 获取td的id

php - 获取多行的所有 URL

asp.net - Entity Framework : Specified method is not supported

iOS 基础知识 : private property, 公共(public) setter / getter

ruby-on-rails - Ruby on Rails activerecord 在一个 sql 和 Will_Paginate 中找到平均值