Задать вопрос
trevoga_su
@trevoga_su

Как побороть ошибку «New transaction is not allowed because there are other threads running in the session»?

$dbh = new PDO("sqlsrv:Server=$hostname;Database=$dbname","$username","$pw");
$dbh->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);

try {
	$sql = 'select top 10 * from [med_Pay]';
	$stmt = $dbh->prepare($sql);
	$stmt->execute();

	$dbh->beginTransaction();
	
	// этот блок тоже ни на что не влияет...
	while ($row = $stmt->fetch(PDO::FETCH_ASSOC)) {
		echo $row['id'] . "\n";	
	}
	
	$dbh->commit();
	
} catch (Exception $e) {
	echo $e->getMessage(); // ][SQL Server]New transaction is not allowed because there are other threads running in the session.
}


не понимаю, в чем причина

UPD. Подсказали: Ну если я прав, то ты открыл курсор(это я терминами Оракл оперирую.. в мскуле может по другому называться), потом, не закрыв его, хочешь начать транзакцию. Что СУБД не очень хочет делать о чем и говорит.
Если хочешь делать как ты описал - получи все данные, закрой курсор и потом только открывай транзакцию.
  • Вопрос задан
  • 1054 просмотра
Подписаться 1 Оценить Комментировать
Пригласить эксперта
Ответы на вопрос 2
@Toey
Вам говорит что уже используется транзакция в данном подключение
Ответ написан
Комментировать
@shagguboy
$stmt = $dbh->prepare($sql);
  $stmt->execute();

  $dbh->beginTransaction();
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы