繁体   English   中英

PHP如果同时发送多个sqlsrv-querys,如何处理错误

[英]PHP How to handle errors if multiple sqlsrv-querys are sent simultaneously

我有下表:

CREATE TABLE [dbo].[TestDB] (
    [col1] INT NOT NULL, 
    [col2] VARCHAR(50) NOT NULL

);

现在我想添加entrys:

    $params=array(123,'someString');
    $sql = "insert into testDB values(?,?)";

    $stmt = sqlsrv_query( $conntask, $sql ,$params);
    if( $stmt === false) {
        echo $sql;
        print_r($params);
        die( print_r( sqlsrv_errors(), true) );
    }

如果出现错误,$ stmt将为false,将打印该消息并终止脚本。

我的问题

如果我想添加多个entrys,我会同时发送所有查询。

    $params=array(123,'someString','notANumber','someOtherString');
    $sql = "insert into testDB values(?,?) insert into testDB values(?,?)";

    $stmt = sqlsrv_query( $conntask, $sql ,$params);
    if( $stmt === false) {
        echo $sql;
        print_r($params);
        die( print_r( sqlsrv_errors(), true) );
    }

在此示例中,第一个插入将成功,第二个插入将失败,因为我尝试将字符串放在int列中。
现在$ stmt不是false,并且在错误发生之前执行查询。

我的问题:

  1. 如何在任何时候检查查询是否失败?
  2. 如何确保查询是完整执行还是根本不执行?

您的转换必须回滚任何错误。

在事务开始时使用SET XACT_ABORT ON命令,然后添加BEGIN TRANSACTION命令可以解决您的问题。

  • 在SMSS方面的用法

     SET XACT_ABORT ON; BEGIN TRANSACTION -- your queries here COMMIT TRANSACTION 
  • PHP方面的用法

     ... $sql = "SET XACT_ABORT ON; " . "BEGIN TRANSACTION " . "insert into testDB values(?,?) insert into testDB values(?,?)" . "COMMIT TRANSACTION"; ... 

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM