在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。
phptry { // 执行数据库操作 $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 回复