Edit report at https://bugs.php.net/bug.php?id=80260&edit=1
ID: 80260
Updated by: nikic@php.net
Reported by: corey dot taylor dot fl at gmail dot com
Summary: PDO::inTransaction() returns false when inside
transaction
Status: Open
Type: Bug
Package: PDO MySQL
PHP Version: 8.0.0RC2
Block user comment: N
Private report: N
New Comment:
Do you mix usage of PDO transaction APIs with transaction queries? Like, call
PDO::beginTransaction() and then issue a manual COMMIT?
PDO's internal state could go out of sync in such a case. We should probably make PDO
internally use the same mechanism as PDO::inTransaction() to determine whether it is inside a
transaction.
However, I'm not sure this is really the case you're seeing, I suspect that is another
problem here.
Previous Comments:
------------------------------------------------------------------------
[2020-10-20 03:58:18] corey dot taylor dot fl at gmail dot com
The environment we see this on is ubuntu 16.04 (xenial) travis-ci with default mysql 5.7 and php
nightly builds. There are no custom pdo configurations.
------------------------------------------------------------------------
[2020-10-20 03:36:46] corey dot taylor dot fl at gmail dot com
Description:
------------
We started seeing failures with php 8 and mysql 5.7 that seem to suggest PDO::inTransaction() is
returning false when inside a transaction.
When calling PDO::beginTransaction(), sometimes we see this error:
PDOException: There is already an active transaction
This happens because we skip calling PDO::commit() if PDO::inTransaction() returns false. When
skipping this check and calling commit(), the transaction succeeds. Normally, when that check
returns false, commit() will fail.
I see that inTransaction() for mysql was re-written recently in this commit:
https://github.com/php/php-src/commit/6a4eeb1c47c46d8f6a1c43eb7de8e6ee8158ec99
We're not sure how to find the root cause of this. The test case in the commit checks all ways
to manually start/stop a transaction, but we obviously have other queries in the transaction.
------------------------------------------------------------------------
--
Edit this bug report at https://bugs.php.net/bug.php?id=80260&edit=1