|  support |  documentation |  report a bug |  advanced search |  search howto |  statistics |  random bug |  login
Bug #53185 PDO_MYSQL constructor, PHP warning w/ Exception error mode
Submitted: 2010-10-27 17:17 UTC Modified: 2020-10-28 11:53 UTC
Avg. Score:4.4 ± 0.8
Reproduced:21 of 21 (100.0%)
Same Version:4 (19.0%)
Same OS:13 (61.9%)
From: alexc223 at googlemail dot com Assigned: nikic (profile)
Status: Closed Package: PDO MySQL
PHP Version: 5.3.3 OS: Linux
Private report: No CVE-ID: None
View Add Comment Developer Edit
Anyone can comment on a bug. Have a simpler test case? Does it work for you on a different platform? Let us know!
Just going to say 'Me too!'? Don't clutter the database with that please !
Your email address:
Solve the problem:
29 + 44 = ?
Subscribe to this entry?

 [2010-10-27 17:17 UTC] alexc223 at googlemail dot com
A PHP warning is generated even though I've explicitly set the PDO error mode to 
use exceptions. This warning occurs when the MySQL socket does not exist (for 
example, if MySQL is not yet started).

This makes it quite impossible to handle.

Test script:
   try {
      $pdo = new Pdo( 'mysql:host=localhost;dbname=test', 'user', 'pass', array(PDO::ATTR_ERRMODE => PDO::ERRMODE_EXCEPTION) );
   } catch ( PDOException $e ) {
      echo 'unable to connect';

Expected result:
unable to connect

Actual result:
Warning: PDO::__construct(): [2002] No such file or directory (trying to connect 
via unix:///var/run/mysqld/mysqld.sock) in php shell code on line 2        
unable to connect


Add a Patch

Pull Requests

Add a Pull Request


AllCommentsChangesGit/SVN commitsRelated reports
 [2010-11-02 22:12 UTC]
-Status: Open +Status: Assigned -Assigned To: +Assigned To: mysql
 [2010-11-02 22:12 UTC]
The warning come from mysqlnd_connect() call that nothing knows about such PDO feature...
 [2010-12-22 17:19 UTC] alexc223 at googlemail dot com
Maybe there needs to be a way for it to know? Either way, it's highly annoying 
since there is very little ways to handle it.
 [2011-01-09 06:11 UTC]
-Assigned To: mysql +Assigned To: kalle
 [2012-05-15 11:37 UTC] jach at wayf dot dk
Same error on OSX version 3.5.10
 [2012-06-24 10:15 UTC] pineain at gmail dot com
Same problem on Windows 7 x64
 [2014-01-01 12:47 UTC]
-Package: PDO related +Package: PDO MySQL
 [2014-12-15 10:28 UTC] s dot adrichem at daisycon dot com
In php 5.3.23 this did not happen upon disconnects and such, eventough we never set the mode, now though in PHP 5.6.3 it does happen even if we change the modes, with the following simple code.

	$sHostName = "";
	$sUserName = "";
	$sPassword = "";
	$sDefaultDb = "";
	$sTestQuery = " SELECT NOW()";

	$iPort = 3306;

	$oDb = new PDO(
		'mysql:host='.$sHostName.';port=' . $iPort,
	var_dump($oDb->getAttribute(PDO::ATTR_ERRMODE) === PDO::ERRMODE_EXCEPTION);
	$sQuery = "SET WAIT_TIMEOUT = 1";
	$oResult = $oDb->prepare( $sQuery );
	$sQuery = "use " . $sDefaultDb;
	$oResult = $oDb->prepare( $sQuery );


	$oResult = $oDb->prepare( $sTestQuery );

	while ($aRow = $oResult->fetch( PDO::FETCH_ASSOC ))

I get the following warnings: 
Warning: PDOStatement::execute(): MySQL server has gone away in pdotest.php on line 31
Warning: PDOStatement::execute(): Error reading result set's header in pdotest.php on line 31

And then the expected exception
Fatal error: Uncaught exception 'PDOException' with message 'SQLSTATE[HY000]: General error: 2006 MySQL server has gone away' in pdotest.php on line 31

Same goes for silent mode, so whats the point of these modes then ;)
 [2015-02-03 17:26 UTC] tom dot castleman at b3-it dot com
This error is present in 5.6.4.

PDO::__construct emits an E_WARNING despite passing PDO::ATTR_ERRMODE option to it:

$pdo = new PDO('mysql:host=foo;dbname=bar', 'user', 'pass', [PDO::ATTR_ERRMODE => PDO::ERRMODE_EXCEPTION]);

Expected Result:
PDOException - MySQL server has gone away

Actual Result:
E_WARNING: PDO::__construct(): MySQL server has gone away
 [2016-07-31 04:25 UTC]
-Status: Assigned +Status: Open -Assigned To: kalle +Assigned To:
 [2018-11-21 23:35 UTC] robert dot spriggs at soapcreative dot com
This issue is present in PHP 7.1 and PHP 7.2.

It can be caught by a Global Exception handler, however there is no way clear way to distinguish between a code error and "MySQL has gone away" or similar.
 [2020-10-28 11:53 UTC]
-Status: Open +Status: Closed -Assigned To: +Assigned To: nikic
 [2020-10-28 11:53 UTC]
Can no longer reproduce this (incorrect socket path throws a PDOException for me), and checking the code, we do promote any warnings thrown during the construction into exceptions.
PHP Copyright © 2001-2021 The PHP Group
All rights reserved.
Last updated: Mon Oct 25 16:03:36 2021 UTC