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