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:25
Avg. Score:4.4 ± 0.8
Reproduced:25 of 25 (100.0%)
Same Version:0 (0.0%)
Same OS:16 (64.0%)
From: sergey at shymko dot net Assigned:
Status: Open Package: PDO MySQL
PHP Version: 5.3.19 OS: Linux
Private report: No CVE-ID:
View Add Comment Developer Edit
Welcome! If you don't have a Git account, you can't do anything here.
You can add a comment by following this link or if you reported this bug, you can edit this bug over here.
(description)
Block user comment
Status: Assign to:
Package:
Bug Type:
Summary:
From: sergey at shymko dot net
New email:
PHP Version: OS:

 

 [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 (!!!).
 
PHP Copyright © 2001-2017 The PHP Group
All rights reserved.
Last updated: Fri Feb 24 19:01:40 2017 UTC