PHP+MySQL事务示例

PHP+MySQL事务示例

我真的没有找到使用MySQL事务的PHP文件的正常示例。你能给我举个简单的例子吗?

还有一个问题。我已经做了很多编程并且不使用事务。我能把一个PHP函数或者什么东西放进去吗?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");}


湖上湖
浏览 499回答 3
3回答

慕田峪9158850

我在处理事务时通常使用的想法如下所示(半伪码):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 (Exception $e) {     // An exception has been thrown     // We must rollback the transaction     $db->rollback();}请注意,根据这种想法,如果查询失败,则必须抛出异常:PDO可以这样做,这取决于您如何配置它。看见PDO::setAttribute和PDO::ATTR_ERRMODE和PDO::ERRMODE_EXCEPTION否则,使用其他API,您可能需要测试用于执行查询的函数的结果,并亲自抛出异常。不幸的是,这里面没有魔法。您不能只是将指令放在某个地方,然后自动完成事务:您仍然必须指定在事务中必须执行哪组查询。例如,在事务处理之前,您经常会有几个查询(在begin)以及事务后的另几个查询(两者之一之后)commit或rollback)不管发生了什么,你都希望这些查询被执行(或否)在交易中。

Cats萌萌

我想我已经搞清楚了,对吗?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");}

炎炎设计

<?php//&nbsp;trans.phpfunction&nbsp;begin(){ &nbsp;&nbsp;&nbsp;&nbsp;mysql_query("BEGIN");}function&nbsp;commit(){ &nbsp;&nbsp;&nbsp;&nbsp;mysql_query("COMMIT");}function&nbsp;rollback(){ &nbsp;&nbsp;&nbsp;&nbsp;mysql_query("ROLLBACK");}mysql_connect("localhost","Dude1",&nbsp;"SuperSecret")&nbsp;or&nbsp;die(mysql_error()); &nbsp;&nbsp;&nbsp;&nbsp;mysql_select_db("bedrock")&nbsp;or&nbsp;die(mysql_error()); &nbsp;&nbsp;&nbsp;&nbsp;$query&nbsp;=&nbsp;"INSERT&nbsp;INTO&nbsp;employee&nbsp;(ssn,name,phone)&nbsp;values &nbsp;&nbsp;&nbsp;&nbsp;('123-45-6789','Matt','1-800-555-1212')";begin();&nbsp;//&nbsp;transaction&nbsp;begins$result&nbsp;=&nbsp;mysql_query($query);if(!$result){ &nbsp;&nbsp;&nbsp;&nbsp;rollback();&nbsp;//&nbsp;transaction&nbsp;rolls&nbsp;back &nbsp;&nbsp;&nbsp;&nbsp;echo&nbsp;"transaction&nbsp;rolled&nbsp;back"; &nbsp;&nbsp;&nbsp;&nbsp;exit;}else{ &nbsp;&nbsp;&nbsp;&nbsp;commit();&nbsp;//&nbsp;transaction&nbsp;is&nbsp;committed &nbsp;&nbsp;&nbsp;&nbsp;echo&nbsp;"Database&nbsp;transaction&nbsp;was&nbsp;successful";}?>
打开App,查看更多内容
随时随地看视频慕课网APP