Я работаю над веб-приложением, написанным на PHP и использующим SQL Server 2008. Для подключения к базе данных я использовал SQLSRV driever от Microsoft.В части этого приложения я должен использовать транзакции SQL.Как предложила Microsoft, я сделал это именно на основе этой статьи.Основные процессы в моих кодах выполняются следующим образом:
1 - запуск транзакции sql
2 - отправка информации в файлы PHP через jQuery и проверка результата, отправленного 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 10.0] [SQL Server] Новая транзакция не разрешена, поскольку существуют другие потоки.работает в сеансе
Я использую драйвер SQLSRV ver.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);
}