PHP PDO事务SQL Server 2014错误
我正在努力使用PDO事务和SQL Server来保存一些发票详细信息:PHP PDO事务SQL Server 2014错误,php,pdo,transactions,sql-server-2014,Php,Pdo,Transactions,Sql Server 2014,我正在努力使用PDO事务和SQL Server来保存一些发票详细信息: try { $DB->beginTransaction(); $DB->query($SQLBody); $DB->query($SQLHeader); $DB->commit(); } catch(PDOExecption $e) { $DB->rollback(); print "Error!: " . $e->getMessage()
try
{
$DB->beginTransaction();
$DB->query($SQLBody);
$DB->query($SQLHeader);
$DB->commit();
}
catch(PDOExecption $e)
{
$DB->rollback();
print "Error!: " . $e->getMessage() . "</br>";
}
系统基于Windows Server 2012 R2、SQL Server 2014和php 7.14
try
{
$DB->beginTransaction();
$DB->query($SQLBody);
$DB->query($SQLHeader);
$DB->commit();
}
catch(PDOExecption $e)
{
$DB->rollback();
print "Error!: " . $e->getMessage() . "</br>";
}
问题是,尽管两个查询都被执行,并且我在数据库中找到了记录(因此我假设$DB和SQL查询都可以)
try
{
$DB->beginTransaction();
$DB->query($SQLBody);
$DB->query($SQLHeader);
$DB->commit();
}
catch(PDOExecption $e)
{
$DB->rollback();
print "Error!: " . $e->getMessage() . "</br>";
}
我还安装了最新的驱动程序(5.2):php_pdo_sqlsrv_71_nts_x64.dll
try
{
$DB->beginTransaction();
$DB->query($SQLBody);
$DB->query($SQLHeader);
$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>";
}
致命错误:未捕获PDO异常:第191行中没有活动事务
try
{
$DB->beginTransaction();
$DB->query($SQLBody);
$DB->query($SQLHeader);
$DB->commit();
}
catch(PDOExecption $e)
{
$DB->rollback();
print "Error!: " . $e->getMessage() . "</br>";
}
其中第191行包含$DB->commit()代码>
try
{
$DB->beginTransaction();
$DB->query($SQLBody);
$DB->query($SQLHeader);
$DB->commit();
}
catch(PDOExecption $e)
{
$DB->rollback();
print "Error!: " . $e->getMessage() . "</br>";
}
我尝试了以下三种解决方案:
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>";
}
试试看
{
$DB->beginTransaction();
$IB=$DB->prepare($SQLBody);
$IH=$DB->prepare($SQLHeader);
$IB->execute();
$IH->execute();
$DB->commit();
}
捕获(PDO执行选项$e)
{
$DB->rollback();
打印“错误!:”$e->getMessage()。“”;
}
然后我试了一下:
try
{
$DB->beginTransaction();
$DB->query($SQLBody);
$DB->query($SQLHeader);
$DB->commit();
}
catch(PDOExecption $e)
{
$DB->rollback();
print "Error!: " . $e->getMessage() . "</br>";
}
试试看
{
$DB->beginTransaction();
$DB->query($SQLBody);
$DB->query($SQLHeader);
$DB->commit();
}
捕获(PDO执行选项$e)
{
$DB->rollback();
打印“错误!:”$e->getMessage()。“”;
}
最后,这一发现(虽然对sql server 2017似乎有效)
try
{
$DB->beginTransaction();
$DB->query($SQLBody);
$DB->query($SQLHeader);
$DB->commit();
}
catch(PDOExecption $e)
{
$DB->rollback();
print "Error!: " . $e->getMessage() . "</br>";
}
试试看
{
$DB->beginTransaction();
$IB=$DB->exec($SQLBody);
$IH=$DB->exec($SQLHeader);
$DB->commit();
}
捕获(PDO执行选项$e)
{
$DB->rollback();
打印“错误!:”$e->getMessage()。“”;
}
是否可以提出问题?是否启用了自动提交?尝试调用$DB->setAttribute(\PDO::ATTR\u AUTOCOMMIT,false)
beforebeginTransaction()
。已尝试,但似乎属性自动提交不适用于sql server
try
{
$DB->beginTransaction();
$DB->query($SQLBody);
$DB->query($SQLHeader);
$DB->commit();
}
catch(PDOExecption $e)
{
$DB->rollback();
print "Error!: " . $e->getMessage() . "</br>";
}