gpt4 book ai didi

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

转载 作者:可可西里 更新时间:2023-10-31 23:28:39 25 4
gpt4 key购买 nike

我有下表:

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

);

现在我要添加条目:

    $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,将打印消息并终止脚本。

我的问题

如果我想添加多个条目,我将同时发送所有查询。

    $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 不为假,查询会一直执行到错误发生为止。

我的问题:

  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";
    ...

关于如果同时发送多个 sqlsrv 查询,PHP 如何处理错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37184077/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com