Req #62065 [Com]: PDO should have a disconnect method

From: Date: Fri, 08 Jan 2016 09:46:21 +0000
Subject: Req #62065 [Com]: PDO should have a disconnect method
References: 1  Groups: php.bugs 
Request: Send a blank email to php-bugs+get-198513@lists.php.net to get a copy of this message
Edit report at https://bugs.php.net/bug.php?id=62065&edit=1

 ID:                 62065
 Comment by:         theunis dot botha1 at gmail dot com
 Reported by:        b12 at bsdpower dot com
 Summary:            PDO should have a disconnect method
 Status:             Assigned
 Type:               Feature/Change Request
 Package:            PDO related
 Operating System:   Any
 PHP Version:        5.3.13
 Assigned To:        willfitch
 Block user comment: N
 Private report:     N

 New Comment:

Dear willfitch@php.net

This is the MOST REDICULOUS statement I have ever seen :

"but in reality, is no different than a method call:

$dbh->close();

vs.

$dbh = null;

Both would achieve the same thing, but one is more attractive than the other."

These two statements ARE COMPLETELY DIFFERENT.

$dbh->close() would call into C or C++ or whichever language the WHOLE PDO MESS was written in,
allows you to re-use the $dbh object FROM PHP.

$dbh = null simply unsets the object in PHP and relies on the garbage collection mechanism (however
it is configured) to do the cleanup for you.

So I DO NOT KNOW in WHICH WORLD some person got the idea of : 'lets provide a connect()
function but no disconnect() function'

And $dbh = null IS SIMPLY NOT ELEGANT.

Please stop trying to BS everyone.

Provide a bloody disconnect() function for PDO and stop trying to convince everyone its not needed.
IT IS NEEDED. 

Also, PDO persistent connections is the worst IDEA EVER.


Previous Comments:
------------------------------------------------------------------------
[2015-03-11 17:00:55] bpolaszek at gmail dot com

Hello,

Actually unset($pdo) or $pdo = null works well as soon as there aren't any PDOStatement object
initialized somewhere.

When working on prepared statements, unsetting the PDO instance has the following behaviour :

$pdo = new PDO([...]);
$stmt = $pdo->prepare("SELECT * FROM mytable WHERE mycolumn = :myvalue");
$stmt->bindValue(':myvalue', 'oh hi');
$stmt->execute();
$myvalue = $stmt->fetch(PDO::FETCH_COLUMN);
unset($myvalue); // $myvalue == null
unset($stmt); // $stmt == null
unset($pdo); // $pdo == null
sleep(30); // for 30 seconds, I can see the PDO connection is still alive on my MySql server,
despite $pdo is null. This wouldn't happen if I didn't prepare a statement.

Tested on PHP 5.3, PHP 5.4, PHP 5.5.

Do you plan a fix for this ? To avoid hundreds of sleeping connections while parsing big files, PHP
should really disconnect from the database when asked to.

------------------------------------------------------------------------
[2014-01-19 00:51:42] willfitch@php.net

Updated wrong ticket.  My apologies.  I am still looking into this.

------------------------------------------------------------------------
[2014-01-19 00:50:49] willfitch@php.net

The fix for this bug has been committed.

Snapshots of the sources are packaged every three hours; this change
will be in the next snapshot. You can grab the snapshot at
http://snaps.php.net/.

 For Windows:

http://windows.php.net/snapshots/
 
Thank you for the report, and for helping us make PHP better.

This will be available in the next releases of PHP 5

------------------------------------------------------------------------
[2014-01-10 03:44:41] willfitch@php.net

I want to also note that any close/disconnect functionality will not affect persistent connectivity.

------------------------------------------------------------------------
[2014-01-10 03:23:03] willfitch@php.net

This is really semantics, but I agree.  The current documented approach
(http://www.php.net/manual/en/pdo.connections.php) is to set the connection variable to null, which
isn't elegant, but in reality, is no different than a method call:

$dbh->close();

vs.

$dbh = null;

Both would achieve the same thing, but one is more attractive than the other.  

I'll look into adding a close/disconnect method and implement on existing drivers.

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


The remainder of the comments for this report are too long. To view
the rest of the comments, please view the bug report online at

    https://bugs.php.net/bug.php?id=62065


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


Thread (13 messages)

« previous php.bugs (#198513) next »