Bug #80871 [Opn]: PDO::inTransactional() always return false (Yii2)

From: Date: Tue, 13 Apr 2021 14:19:01 +0000
Subject: Bug #80871 [Opn]: PDO::inTransactional() always return false (Yii2)
References: 1  Groups: php.bugs 
Request: Send a blank email to php-bugs+get-233400@lists.php.net to get a copy of this message
Edit report at https://bugs.php.net/bug.php?id=80871&edit=1

 ID:                 80871
 Updated by:         nikic@php.net
 Reported by:        sevak754 at gmail dot com
 Summary:            PDO::inTransactional() always return false (Yii2)
 Status:             Open
 Type:               Bug
 Package:            PDO DBlib
 Operating System:   Linux
 PHP Version:        8.0.3
 Block user comment: N
 Private report:     N

 New Comment:

PDO DBlib uses PDOs transaction state emulation. I looked through the code, but didn't spot any
obvious issues. I can't test this driver myself.


Previous Comments:
------------------------------------------------------------------------
[2021-04-13 13:58:43] menschov dot evgeny at yandex dot ru

Are there any chances of fixing this problem?

------------------------------------------------------------------------
[2021-03-17 06:58:03] sevak754 at gmail dot com

Yes, DBLIB version 7.2

------------------------------------------------------------------------
[2021-03-16 08:46:55] nikic@php.net

When you say you use MSSQL, does that mean you use the PDO DBLIB driver?

------------------------------------------------------------------------
[2021-03-16 08:39:41] sevak754 at gmail dot com

Description:
------------
I've tried to begin transaction with Yii2, but it didn't commit. It happened because here
yiisoft/yii2/db/Transaction.php:168 is PDO::inTransactional() check and he always return false. This
problem appeared after update to php 8.
I use MSSQL and I think there is a problem with driver.

Test script:
---------------
if ($this->_level === 0) {
            Yii::debug('Commit transaction', __METHOD__);
            // make sure the transaction wasn't autocommitted
            if ($this->db->pdo->inTransaction()) { // always false
                $this->db->pdo->commit();
            }
            $this->db->trigger(Connection::EVENT_COMMIT_TRANSACTION);
            return;
        }


Expected result:
----------------
Transaction has been commited

Actual result:
--------------
Transaction has been rollbacked


------------------------------------------------------------------------



--
Edit this bug report at https://bugs.php.net/bug.php?id=80871&edit=1


Thread (6 messages)

« previous php.bugs (#233400) next »