Req #64603 [Opn]: Implement check_liveness for PDO_Firebird

From: Date: Wed, 09 Jun 2021 10:41:15 +0000
Subject: Req #64603 [Opn]: Implement check_liveness for PDO_Firebird
References: 1  Groups: php.bugs 
Request: Send a blank email to php-bugs+get-234281@lists.php.net to get a copy of this message
Edit report at https://bugs.php.net/bug.php?id=64603&edit=1

 ID:                 64603
 Updated by:         cmb@php.net
 Reported by:        slavb18 at gmail dot com
-Summary:            missing function to close persistent connection
+Summary:            Implement check_liveness for PDO_Firebird
 Status:             Open
 Type:               Feature/Change Request
-Package:            PDO related
+Package:            PDO Firebird
 Operating System:   Any
 PHP Version:        5.3.23
 Block user comment: N
 Private report:     N

 New Comment:

> with pdo_firebird_check_liveness now works ok,

Right.  When a new persistent connection is established, and the
driver implements the check_liveness method, it is called, and if
the connection is no longer alive, a new connection is
established.


Previous Comments:
------------------------------------------------------------------------
[2013-09-18 05:28:10] slavb18 at gmail dot com

with pdo_firebird_check_liveness now works ok,
no more shutdown connections returned to php

------------------------------------------------------------------------
[2013-05-25 09:21:01] michael at mjburgess dot co dot uk

I've confirmed this

------------------------------------------------------------------------
[2013-04-07 07:24:16] slavb18 at gmail dot com

may be there is also third way to resolve problem

1. PDO class should have function
public function isValid(){
    return TRUE; // or some embedded functional like start/finish transaction ? dont know how it
work with other drivers
}
2. derived class override & implement method isValid() (like in my example)
3. php before returning PDO class from connection pool should call isValid() method, and if
validation the result is false, then automatically refresh connection

------------------------------------------------------------------------
[2013-04-07 07:13:03] slavb18 at gmail dot com

there is similiar Bug #40681 with oracle

------------------------------------------------------------------------
[2013-04-07 07:11:12] slavb18 at gmail dot com

Description:
------------
PHP PDO class is missing ability to close persistent connection:
__destruct does not close it, even if I call setAttribute(PDO::ATTR_PERSISTENT,FALSE) before
destruction
May be __destruct should analyze PDO::ATTR_PERSISTENT attribute or there should be explicit function
to close persistent connection.

Need to close invalid (shutdown) peristent connection demonstrate example below:

Example with firebird:
1. establish persistent connect in php
2. shutdown connection on server
3. try to get persistent connect from php again
there will be error "General error: -902 connection shutdown"

I can check connection validity in my pdo derived class like this:
	public function isValid(){
		$valid=TRUE;
		try {
			$this->beginTransaction();
			$this->commit();
		} catch (PDOException $e){
			$valid=FALSE;
		}
		return $valid;
	}

but I can not "refresh" or "close" my broken connection, there is no function to
free it in php connection pool



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



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


Thread (7 messages)

« previous php.bugs (#234281) next »