PHP事务的使用方法

<?php
//数据库连接
$conn = mysql_connect('localhost', 'root', '');
mysql_select_db('test', $conn);
mysql_query("SET NAMES GBK");

/*
支持事务的表必须是InnoDB类型
一段事务中只能出现一次:
mysql_query('START TRANSACTION');//开始事务
mysql_query(' ROLLBACK ');//回滚事务
mysql_query('COMMIT');//提交事务

如果一段事务中出现多次回滚事务,则在,提交事务时只将第一次回滚前至开始事务后对数据库的所有操作取消,第一次回滚后至提交事务前所有对数据库操作仍将有效,所以一般将回滚语句仅放在提交事务语句前
如果一段事务无提交语句,则从开始事务时以下的所有对数据库操作虽执行(执行方法返回对错),但对数据库无影响,但是在执行下段开始事务语句时,前段事务自动提交
*/
mysql_query('START TRANSACTION');
$isBad = 0;

$ins_testTable1 = "INSERT INTO testtable1(NAME,age)VALUES('first',23)";
if(!mysql_query($ins_testTable1)){
    $isBad =1;
}
//插入语句字段名有错
$ins_testTable2 = "INSERT INTO testtable1(NAME,ages)VALUES('second','24')";
if(!mysql_query($ins_testTable2)){
    $isBad =1;
}
if($isBad == 1){
    echo $isBad;
    mysql_query('ROLLBACK ');
}
mysql_query('COMMIT');
mysql_close($conn);
?>

### 如何在PHP使用MongoDB事务 #### 创建客户端并启动会话 为了能够在PHP应用程序中执行MongoDB事务,首先需要创建一个新的`MongoDB\Client`实例来连接到MongoDB服务器。接着,调用`startSession()`方法开始新的会话。 ```php $client = new MongoDB\Client("mongodb://localhost:27017"); $session = $client->startSession(); ``` #### 开始事务 一旦有了活动的会话,就可以通过调用`startTransaction()`函数开启一个事务环境,在此期间可以安全地执行多个写操作而不会影响数据一致性[^2]。 ```php $session->startTransaction([ 'readConcern' => new MongoDB\Driver\ReadConcern(MongoDB\Driver\ReadConcern::MAJORITY), 'writeConcern' => new MongoDB\WriteConcern\Majority(1000), // 1秒超时时间 ]); ``` #### 执行一系列的操作 在此阶段内可进行任何数量的数据修改命令,比如插入、更新或删除文档等动作。这些更改只有当整个事务成功提交后才会生效。 ```php try { $collection = $client->testdb->users; // 插入新记录 $resultInsert = $collection->insertOne( ['name' => 'Alice', 'age' => 30], ['session' => $session] ); // 更新现有记录 $resultUpdate = $collection->updateOne( ['_id' => new MongoDB\BSON\ObjectID('some_id')], ['$set' => ['status' => 'active']], ['session' => $session] ); } catch (Exception $e) { echo "An error occurred during the transaction."; } ``` #### 提交或回滚事务 如果所有预期中的变更都顺利完成,则应该调用`commitTransaction()`使它们永久保存;反之则应调用`abortTransaction()`取消所有的改动以保持原始状态不变。 ```php if ($everythingIsFine) { $session->commitTransaction(); } else { $session->abortTransaction(); } // 结束会话 $session->endSession(); ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值