我真的没有找到使用 MySQL 事务的 PHP 文件的正常示例。你能给我看一个简单的例子吗?
还有一个问题。我已经做了很多编程并且没有使用事务。我可以在其中放置一个 PHP 函数或其他东西header.php,如果一个mysql_query失败,那么其他的也会失败吗?
header.php
mysql_query
我想我已经想通了,对吗?:
mysql_query("SET AUTOCOMMIT=0"); mysql_query("START TRANSACTION"); $a1 = mysql_query("INSERT INTO rarara (l_id) VALUES('1')"); $a2 = mysql_query("INSERT INTO rarara (l_id) VALUES('2')"); if ($a1 and $a2) { mysql_query("COMMIT"); } else { mysql_query("ROLLBACK"); }
我在处理事务时通常使用的想法是这样 的(半伪代码) :
try { // First of all, let's begin a transaction $db->beginTransaction(); // A set of queries; if one fails, an exception should be thrown $db->query('first query'); $db->query('second query'); $db->query('third query'); // If we arrive here, it means that no exception was thrown // i.e. no query has failed, and we can commit the transaction $db->commit(); } catch (\Throwable $e) { // An exception has been thrown // We must rollback the transaction $db->rollback(); throw $e; // but the error must be handled anyway }
请注意,根据这个想法,如果查询失败,则必须抛出异常:
PDO::setAttribute
PDO::ATTR_ERRMODE
PDO::ERRMODE_EXCEPTION
不幸的是,没有魔法。您不能只是在某处放置指令并自动完成事务:您仍然必须指定必须在事务中执行哪组查询。
例如 , 您 通常 会 在事务 之前begin( _在commit``rollback_交易。 __
begin
commit``rollback