我似乎遇到了PHP7中的回滚功能问题。这是我的代码,但如果我提供查询并将错误放入其中一个,它就不会回滚。它仍然会提交已经完成的所有内容。
function sql_transaction(...$queries) {
global $db;
$success = 1;
$db->autocommit(FALSE);
foreach($queries as $query) {
$result = $db->query($query);
echo $result;
if(!$result) {
$success = 0;
break;
}
}
if($success == 1) {
$db->commit();
}else{
$db->rollback();
}
$db->autocommit(TRUE);
return $success;
}
答案 0 :(得分:2)
在执行此操作之前,您已开始执行交易。
因为您必须告诉数据库您将开始交易。
您必须在自动提交后放置<div class="img24x24 tab-achievement sprite">
<span>Hello World.</span>
</div>
<div class="img36x36 tab-achievement sprite">
<span>Hello World.</span>
</div>
<div class="tab-achievement sprite">
<span>Hello World.</span>
</div>
<hr>
<div class="img36x36 tab-locker sprite" data-text="Hello World - pseudo only">
</div>
(FALSE);
请阅读文档:mysqli::begin_transaction
附:请记住,引擎不支持事务的表无法完成。因此,如果在添加$db->begin_transaction();
语句begin_transaction
后无效,请检查您的表引擎是否已设置为具有事务支持的引擎。
在mysql终端中检查你的表引擎调用查询:
rollback()
您将获得定义了引擎的数据库中的表列表。
获取事务安全引擎列表您可以通过在mysql终端中调用查询来查找(查找事务:是):
SHOW TABLE STATUS FROM database_name_goes_here;