Я борюсь с транзакциями PDO и SQL Server, чтобы сохранить некоторые детали счетов:
Система основана на Windows Server 2012 R2, SQL Server 2014 и PHP 7.14.
Проблема в том, что хотя оба запроса выполняются, и я нахожу записи в базе данных (поэтому я предполагаю, что и $ DB, и SQL-запросы в порядке)
Я также установил последние версии драйверов (5.2): php_pdo_sqlsrv_71_nts_x64.dll
Я всегда получаю следующий ответ:
Неустранимая ошибка: Uncaught PDOException: нет активной транзакции в строке 191
где строка 191 содержит $DB->commit();
Я попробовал эти 3 решения:
try
{
$DB->beginTransaction();
$IB=$DB->prepare($SQLBody);
$IH=$DB->prepare($SQLHeader);
$IB->execute();
$IH->execute();
$DB->commit();
}
catch(PDOExecption $e)
{
$DB->rollback();
print "Error!: " . $e->getMessage() . "</br>";
}
тогда я попробовал это:
try
{
$DB->beginTransaction();
$DB->query($SQLBody);
$DB->query($SQLHeader);
$DB->commit();
}
catch(PDOExecption $e)
{
$DB->rollback();
print "Error!: " . $e->getMessage() . "</br>";
}
и наконец это как нашел ВОТ (это работает, хотя кажется, для SQL Server 2017)
try
{
$DB->beginTransaction();
$IB=$DB->exec($SQLBody);
$IH=$DB->exec($SQLHeader);
$DB->commit();
}
catch(PDOExecption $e)
{
$DB->rollback();
print "Error!: " . $e->getMessage() . "</br>";
}
можете подсказать что не так?
Задача ещё не решена.
Других решений пока нет …