gpt4 book ai didi

php - 什么是 PHP 和 SQLSRV 驱动程序中的 "New transaction is not allowed"错误?

转载 作者:塔克拉玛干 更新时间:2023-11-03 05:48:27 25 4
gpt4 key购买 nike

我正在开发一个用 PHP 编写并使用 SQL Server 2008 的 Web 应用程序。为了连接到数据库,我使用了 Microsoft 的 SQLSRV 驱动程序。在此应用程序的一部分中,我必须使用 SQL 事务。正如微软建议的那样,我完全是根据这篇文章做的。我的代码中的主要流程遵循以下步骤:
1- 启动 sql 事务
2-通过jQuery向PHP文件发送信息并查看JSON发送的结果
3- 如果结果为假则回滚,如果为真则转到下一个查询。
4- 如果没有错误发生并且所有结果都正常,则提交事务。

// This is my pseudo code
if (sqlsrv_begin_transaction( $sqlsrv->sqlsrvLink ) === true) {

$firstQuery = sqlsrv_query($stmt1);
if (!$firstQuery) {
sqlsrv_rollback();
} else {
$nextQuery = sqlsrv_query($stmt2);
if (!$nextQuery) {
sqlsrv_rollback();
} else {
sqlsrv_commit();
}
}

} else {
print_r(sqlsrv_errors()); // Here is where I get the error below.
}

我遇到的问题是这个错误:

[Microsoft][SQL Server Native Client 10.0][SQL Server] New transaction is not allowed because there are other threads running in the session

我正在使用 SQLSRV 驱动程序版本 2。
这是什么错误?我该如何解决?

我将我自己的 sqlsrv 类包含在包含以下方法的 index.php 的第一部分:

function __construct($dbServerName,$dbUsername,$dbPassword,$dbName)
{
$connectionInfo = array("Database"=> $dbName, "CharacterSet" => "UTF-8");
$this->sqlsrvLink = sqlsrv_connect($dbServerName, $connectionInfo);
if ($this->sqlsrvLink === false) {
$this->sqlsrvError = sqlsrv_errors();
}
}

function __destruct()
{
sqlsrv_close($this->sqlsrvLink);
}

最佳答案

我认为当你想连接到 sql server 时,你应该将 MultipleActiveResultSets 设置为 true :

 $conn = sqlsrv_connect('127.0.0.1', array
(
'Database' => 'Adventureworks',
'MultipleActiveResultSets' => true, // MARS ENABLED
));

http://php.net/manual/de/ref.pdo-sqlsrv.connection.php

关于php - 什么是 PHP 和 SQLSRV 驱动程序中的 "New transaction is not allowed"错误?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9494587/

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