乐闻世界logo
搜索文章和话题

How to start and end transaction in mysqli?

4 个月前提问
4 个月前修改
浏览次数17

1个答案

1

在MySQLi 中,事务处理是一个非常重要的功能,它确保了数据的完整性和一致性。事务是指将多个步骤包裹在一个单独的工作单元中,如果这些步骤中的任何一个失败了,整个事务都会回滚,之前的所有操作都不会对数据库有任何影响。相反,如果所有步骤都成功了,则通过一个操作将所有的修改保存到数据库中。

启动事务

在MySQLi中,启动一个事务通常是通过调用 autocommit 方法并设置其参数为 false 开始的。这样做可以阻止MySQL自动提交SQL操作,这是事务处理的关键。

php
// 创建mysqli对象 $mysqli = new mysqli('localhost', 'my_user', 'my_password', 'my_db'); // 检查连接是否成功 if ($mysqli->connect_error) { die('Connect Error (' . $mysqli->connect_errno . ') ' . $mysqli->connect_error); } // 关闭自动提交功能 $mysqli->autocommit(FALSE);

执行事务中的操作

在事务中,你可以执行多个需要的数据库操作,如INSERT、UPDATE或DELETE。

php
try { // 执行数据库操作 $mysqli->query("INSERT INTO Account (user, amount) VALUES ('User1', 100)"); $mysqli->query("UPDATE Account SET amount = amount - 100 WHERE user = 'User2'"); // 如果没有异常则提交事务 $mysqli->commit(); } catch (Exception $e) { // 如果执行中有错误,回滚所有操作 $mysqli->rollback(); echo "Transaction failed: " . $e->getMessage(); }

在上面的代码中,commit() 方法用于提交所有自事务开始以来对数据库的更改。如果任何指令失败,异常处理机制会捕捘到,并通过调用 rollback() 方法来撤销所有改动,恢复数据库到事务开始前的状态。

结束事务

结束事务处理后,应该通过将 autocommit 方法重新设置为 true 来重新启用MySQL的自动提交功能。

php
// 重新启用自动提交 $mysqli->autocommit(TRUE);

这样,事务处理就完成了。确保在脚本结束时关闭数据库连接:

php
// 关闭连接 $mysqli->close();

通过以上步骤,你可以在MySQLi中有效地管理事务,确保数据操作的原子性和一致性。

2024年8月6日 23:49 回复

你的答案