Commit a0d743ca174 for php.net
commit a0d743ca174fe5e0b64ecae27682acf03bd96eae
Author: Frediano Ziglio <freddy77@gmail.com>
Date: Thu Apr 9 03:34:04 2026 +0100
ext/pdo_dblib: Added dblib_handle_check_liveness handler (#21681)
Closes #21681
In case of persistent connection it was not checked if the
connection was still alive always assuming it was.
If the connection was broken this caused PHP to reuse the
broken connection over and over.
dbdead function is supported by all dblib implementation
(MS, Sybase, FreeTDS).
Change tested manually, see
https://github.com/FreeTDS/freetds/issues/711#issuecomment-4211772091
Signed-off-by: Frediano Ziglio <freddy77@gmail.com>
diff --git a/NEWS b/NEWS
index fd17715973a..45524b382c7 100644
--- a/NEWS
+++ b/NEWS
@@ -99,6 +99,9 @@ PHP NEWS
. Added TLS session resumption support for streams with new context options
and Openssl\Session class. (Jakub Zelenka)
+- PDO_DBLIB;
+ . Added dblib_handle_check_liveness handler. (freddy77)
+
- PDO_PGSQL:
. Clear session-local state disconnect-equivalent processing.
(KentarouTakeda)
diff --git a/UPGRADING b/UPGRADING
index 088f5b620bd..fa10bd149f0 100644
--- a/UPGRADING
+++ b/UPGRADING
@@ -204,6 +204,10 @@ PHP 8.6 UPGRADE NOTES
. Output of openssl_x509_parse() contains criticalExtensions listing all
critical certificate extensions.
+- PDO_DBLIB:
+ . When using persistent connections, there is now a liveness check in the
+ constructor.
+
- Phar:
. Phar::mungServer() now supports reference values.
diff --git a/ext/pdo_dblib/dblib_driver.c b/ext/pdo_dblib/dblib_driver.c
index 42ba72b40ed..9f590c9071b 100644
--- a/ext/pdo_dblib/dblib_driver.c
+++ b/ext/pdo_dblib/dblib_driver.c
@@ -420,6 +420,17 @@ static int dblib_get_attribute(pdo_dbh_t *dbh, zend_long attr, zval *return_valu
return 1;
}
+static zend_result dblib_handle_check_liveness(pdo_dbh_t *dbh)
+{
+ pdo_dblib_db_handle *H = (pdo_dblib_db_handle *)dbh->driver_data;
+
+ if (dbdead(H->link)) {
+ return FAILURE;
+ }
+
+ return SUCCESS;
+}
+
static const struct pdo_dbh_methods dblib_methods = {
dblib_handle_closer,
dblib_handle_preparer,
@@ -432,7 +443,7 @@ static const struct pdo_dbh_methods dblib_methods = {
dblib_handle_last_id, /* last insert id */
dblib_fetch_error, /* fetch error */
dblib_get_attribute, /* get attr */
- NULL, /* check liveness */
+ dblib_handle_check_liveness, /* check_liveness */
NULL, /* get driver methods */
NULL, /* request shutdown */
NULL, /* in transaction, use PDO's internal tracking mechanism */