gpt4 book ai didi

php - 一起运行模型

转载 作者:行者123 更新时间:2023-11-29 13:57:32 25 4
gpt4 key购买 nike

应用每个单独的模型,无法回滚或阻止任何插入运行
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/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com