Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/56.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 处理';交易';以编程方式_Php_Mysql_Authorize.net - Fatal编程技术网

Php 处理';交易';以编程方式

Php 处理';交易';以编程方式,php,mysql,authorize.net,Php,Mysql,Authorize.net,我有一个进程,它创建两个数据库表条目,并向authorize.net api发送两个请求 现在,如果在这个过程中的任何时候,程序由于任何原因出错,我想“回滚”。在我们的系统中创建的任何条目都应该被删除,并且应该通知用户有错误,并且应该给用户重试的选项 流的淡化版本如下所示: 创建账户分录->创建用户分录->向Authorize.net发送一次性付款请求->从Authorize.net保存一次性付款请求结果->向Authorize.net发送定期付款请求->从Authorize.net保存定期付款

我有一个进程,它创建两个数据库表条目,并向authorize.net api发送两个请求

现在,如果在这个过程中的任何时候,程序由于任何原因出错,我想“回滚”。在我们的系统中创建的任何条目都应该被删除,并且应该通知用户有错误,并且应该给用户重试的选项

流的淡化版本如下所示:

创建账户分录->创建用户分录->向Authorize.net发送一次性付款请求->从Authorize.net保存一次性付款请求结果->向Authorize.net发送定期付款请求->从Authorize.net保存定期付款请求结果


处理这种情况的最佳方法是什么?

您只需使用表格,然后就可以使用。(即:您将使用
开始
,尝试执行必要的处理,然后相应地发出
提交
回滚

您只需要使用一个表,然后就可以使用。(即:您将使用
开始
,尝试执行必要的处理,然后相应地发出
提交
回滚

我将使用常规InnoDB事务来处理数据库部分。不过,回滚Authorize.NET调用会更加棘手,只需要非常小心地处理异常。

我会使用常规InnoDB事务来处理数据库部分。不过,回滚Authorize.NET调用会更加棘手,只需要非常小心地处理异常。

您可以在事务中包装查询。请注意,要回滚的表需要将其引擎设置为innodb。下面是代码外观的示例:

//Wrap your queries in a transaction

    mysql_query("START TRANSACTION"); 

        try{ 
            //your stuff - if your stuff is successful commit, in the event of an error rollback

            if($success){
                mysql_query("COMMIT"); 
            } 
            else{ 
                mysql_query("ROLLBACK"); 
            } 
        }catch(Exception $e){ 
            //if something goes seriously wrong
            mysql_query("ROLLBACK"); 
        }

您可以在事务中包装查询。请注意,要回滚的表需要将其引擎设置为innodb。下面是代码外观的示例:

//Wrap your queries in a transaction

    mysql_query("START TRANSACTION"); 

        try{ 
            //your stuff - if your stuff is successful commit, in the event of an error rollback

            if($success){
                mysql_query("COMMIT"); 
            } 
            else{ 
                mysql_query("ROLLBACK"); 
            } 
        }catch(Exception $e){ 
            //if something goes seriously wrong
            mysql_query("ROLLBACK"); 
        }