为了账号安全,请及时绑定邮箱和手机立即绑定

PHP+MySQL事务示例

PHP+MySQL事务示例

湖上湖 2019-06-04 17:27:59
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");}
查看完整描述

3 回答

?
慕田峪9158850

TA贡献1794条经验 获得超7个赞

我在处理事务时通常使用的想法如下所示(半伪码):

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可以这样做,这取决于您如何配置它。
  • 否则,使用其他API,您可能需要测试用于执行查询的函数的结果,并亲自抛出异常。


不幸的是,这里面没有魔法。您不能只是将指令放在某个地方,然后自动完成事务:您仍然必须指定在事务中必须执行哪组查询。

例如,在事务处理之前,您经常会有几个查询(在begin)以及事务后的另几个查询(两者之一之后)commitrollback)不管发生了什么,你都希望这些查询被执行(或否)在交易中。


查看完整回答
反对 回复 2019-06-04
?
Cats萌萌

TA贡献1805条经验 获得超9个赞

我想我已经搞清楚了,对吗?

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");}


查看完整回答
反对 回复 2019-06-04
?
炎炎设计

TA贡献1808条经验 获得超4个赞

<?php// trans.phpfunction begin(){
    mysql_query("BEGIN");}function commit(){
    mysql_query("COMMIT");}function rollback(){
    mysql_query("ROLLBACK");}mysql_connect("localhost","Dude1", "SuperSecret") or die(mysql_error());
    mysql_select_db("bedrock") or die(mysql_error());
    $query = "INSERT INTO employee (ssn,name,phone) values
    ('123-45-6789','Matt','1-800-555-1212')";begin(); // transaction begins$result = mysql_query($query);if(!$result){
    rollback(); // transaction rolls back
    echo "transaction rolled back";
    exit;}else{
    commit(); // transaction is committed
    echo "Database transaction was successful";}?>


查看完整回答
反对 回复 2019-06-04
  • 3 回答
  • 0 关注
  • 498 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信