php.net |  support |  documentation |  report a bug |  advanced search |  search howto |  statistics |  random bug |  login
Bug #63812 PDO Triggers Warning(s) Regardless of Error Handling Strategy
Submitted: 2012-12-20 05:25 UTC Modified: 2014-01-01 12:34 UTC
Votes:28
Avg. Score:4.4 ± 0.8
Reproduced:28 of 28 (100.0%)
Same Version:0 (0.0%)
Same OS:19 (67.9%)
From: sergey at shymko dot net Assigned:
Status: Open Package: PDO MySQL
PHP Version: 5.3.19 OS: Linux
Private report: No CVE-ID:
Have you experienced this issue?
Rate the importance of this bug to you:

 [2012-12-20 05:25 UTC] sergey at shymko dot net
Description:
------------
PDO triggers warning(s) regardless of the chosen error handling strategy 
http://php.net/manual/en/pdo.error-handling.php

Environment:
- mysql  Ver 14.14 Distrib 5.5.22, for Linux (x86_64) using  EditLine wrapper

Test script:
---------------
<?php

$adapter = new PDO('mysql:host=localhost;db_name=test', 'root', '');

$adapter->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
assert($adapter->getAttribute(PDO::ATTR_ERRMODE) === PDO::ERRMODE_EXCEPTION);

$waitTimeout = 1;

$adapter->exec("SET @@session.wait_timeout = {$waitTimeout}");
$statement = $adapter->query('SELECT @@session.wait_timeout');
assert($statement->fetchColumn() == $waitTimeout);

/**
 * Ensure 'MySQL server has gone away' conditions are met
 */
sleep($waitTimeout + 1);

$adapter->query('SELECT 1');


Expected result:
----------------
- PDOException with message 'SQLSTATE[HY000]: General error: 2006 MySQL server 
has gone away'
- No warnings (because of the chosen PDO error handling strategy)

Actual result:
--------------
1. When connection type is TCP/IP:
   1. Warning: PDO::query() [pdo.query]: MySQL server has gone away
   2. Warning: PDO::query() [pdo.query]: Error reading result set's header
1'. When connection type is Unix socket:
   1. Warning: Error while sending QUERY packet. PID=18586
2. PDOException with message 'SQLSTATE[HY000]: General error: 2006 MySQL server 
has gone away'

Patches

Add a Patch

Pull Requests

Add a Pull Request

History

AllCommentsChangesGit/SVN commitsRelated reports
 [2012-12-20 05:34 UTC] sergey at shymko dot net
Relates to https://bugs.php.net/bug.php?id=63546
 [2013-05-03 05:09 UTC] fog at yandex dot ru
There is another similar problem, sometimes connection fails with message:

Warning: PDO::__construct(): MySQL server has gone away in [...file_path...] on line N

It happens despiting that PDO::ATTR_ERRMODE is set to PDO::ERRMODE_EXCEPTION
 [2014-01-01 12:34 UTC] felipe@php.net
-Package: PDO related +Package: PDO MySQL
 [2015-01-20 03:10 UTC] nospampls at nospam dot org
I have the same problem, regardless PDO::ERRMODE_EXCEPTION I sometimes get warnings or both warnings and the pdoexception equivalent at the same time (!!!).

please fix
 [2015-02-11 13:20 UTC] oxygenus at gmail dot com
PHP 5.6.5 (cli) (built: Jan 21 2015 17:50:29)
Copyright (c) 1997-2014 The PHP Group
Zend Engine v2.6.0, Copyright (c) 1998-2014 Zend Technologies
    with Zend OPcache v7.0.4-dev, Copyright (c) 1999-2014, by Zend Technologies
    with Xdebug v2.2.7, Copyright (c) 2002-2015, by Derick Rethans


set_error_handler is ignored and has no effect.

Also, as others have commented, the PDO exception mode is also ignored.

The warning is sent to php://stdout no matter what, even if making sure the PDO instance is destroyed and disconnected.

Apparently, the warning is sent to php://stdout during garbage collection.

It makes JSONRPC servers and other stuff impossible to use.
 [2015-06-23 23:16 UTC] klenium2 at gmail dot com
Similar problem:

try { new PDO(
	"mysql:dbname=test;host=notalocalhost",
	$user, $pass,
	[PDO::ATTR_ERRMODE => PDO::ERRMODE_SILENT]
); }
catch (PDOException $e) { die("msg: ".$e->getMessage()); }

Result:

Warning: PDO::__construct(): in C:\file.php on line 2
msg: SQLSTATE[HY000] [2002] php_network_getaddresses: getaddrinfo failed: Nincs ilyen ismert állomás.
 [2016-02-23 09:39 UTC] oxygenus at gmail dot com
Still present in PHP 7.
 [2016-06-15 07:57 UTC] gaobin3243 at 126 dot com
I have the same problem, regardless PDO::ERRMODE_EXCEPTION I sometimes get warnings or both warnings and the pdoexception equivalent at the same time (!!!).
 [2017-04-20 15:38 UTC] justpusher at gmail dot com
We faced this bug too after upgrading our servers to PHP 5.6.30.
Ubuntu 16.04.2 LTS 

The test script given in the bug description reproduces the bug.
 
PHP Copyright © 2001-2017 The PHP Group
All rights reserved.
Last updated: Sat Aug 19 22:01:35 2017 UTC