我有以下PDO代码(PHP 5.6,Microsoft SQL Server 2014):
$st = $db->prepare('SELECT TOP 5 * FROM table');
$st->execute();
while ($st->fetch()) {
var_dump($db->beginTransaction());
//$db->rollback();
}
结果如下:
bool(false)
bool(false)
bool(false)
bool(false)
bool(true)
我期待所有真实的结果,但在检索到最后一条记录之前,交易才会开始。为什么我不能在循环结果集时启动事务?
开启或关闭MARS似乎没有任何效果。
答案 0 :(得分:1)
只要光标处于打开状态,就无法在使用MSSQL时启动新事务。在结果集上调用closeCursor()或检索消耗查询返回的所有结果会释放该游标并再次允许事务。
也; beginTransaction()返回false也会产生一个可以使用errorInfo()检索的错误;话说:
不允许使用新事务,因为会话中还有其他线程在运行。