php.net |  support |  documentation |  report a bug |  advanced search |  search howto |  statistics |  random bug |  login
Bug #74401 PDO trigger warning already set throw exception
Submitted: 2017-04-10 09:39 UTC Modified: 2020-10-28 14:40 UTC
Votes:8
Avg. Score:4.0 ± 1.0
Reproduced:8 of 8 (100.0%)
Same Version:4 (50.0%)
Same OS:1 (12.5%)
From: lusc at jiedaibao dot com Assigned: nikic (profile)
Status: Closed Package: PDO MySQL
PHP Version: 7.0.17 OS: Centos6.x
Private report: No CVE-ID: None
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: lusc at jiedaibao dot com
New email:
PHP Version: OS:

 

 [2017-04-10 09:39 UTC] lusc at jiedaibao dot com
Description:
------------
PDOStatement::execute trigger an error when lost connection. I have already set 
$this->pdo->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);


bug an Warning error is trigger , like:
Warning: PDOStatement::execute: MySQL server has gone away in ...

Expected result:
----------------
just throw exception

Actual result:
--------------
warning and exception all trigger

Patches

Add a Patch

Pull Requests

Add a Pull Request

History

AllCommentsChangesGit/SVN commitsRelated reports
 [2017-04-10 09:52 UTC] danack@php.net
Please can you provide a simple test script that shows this.
 [2017-04-10 09:56 UTC] danack@php.net
-Status: Open +Status: Feedback
 [2017-04-10 09:56 UTC] danack@php.net
Forgot to update the status to feedback. Also, the reason I'm asking for an example is that the code for generating warning or exceptions looks really quite unlikely to do both.

https://github.com/php/php-src/blob/528468579b002ff17e3c38d9330da67749fd85ec/ext/pdo/pdo_dbh.c#L149-L165
 [2017-04-11 15:04 UTC] lusc at jiedaibao dot com
-Status: Feedback +Status: Open
 [2017-04-11 15:04 UTC] lusc at jiedaibao dot com
example:
```
error_reporting(E_ALL);
ini_set('display_errors', 'on');
try {
    $pdo = new PDO('mysql:dbname=qiye;host=100.73.13.5;charset=utf8', 'myroot', 'Hsql1234');
    $pdo->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);

    $stmt1 = $pdo->prepare('SELECT * FROM auth limit 1');
    $stmt1->execute();
    var_dump($stmt1->fetchAll());

    sleep('30'); // stop the mysql server at this time

    $stmt1 = $pdo->prepare('SELECT * FROM jdb_company_info limit 1');
    $stmt1->execute();
    var_dump($stmt1->fetchAll());
} catch (Throwable $e) {
    var_dump($e->__toString());
}
```

output:

```
array(0) {
}
Warning: PDOStatement::execute(): MySQL server has gone away in /mnt/g/workspace/workspace/qiye/tests/web/test.php on line 21

Warning: PDOStatement::execute(): Error reading result set's header in /mnt/g/workspace/workspace/qiye/tests/web/test.php on line 21
string(240) "PDOException: SQLSTATE[HY000]: General error: 2006 MySQL server has gone away in /mnt/g/workspace/workspace/qiye/tests/web/test.php:21
Stack trace:
#0 /mnt/g/workspace/workspace/qiye/tests/web/test.php(21): PDOStatement->execute()
#1 {main}"
```
 [2017-04-12 06:45 UTC] lusc at jiedaibao dot com
https://bugs.php.net/bug.php?id=63812 , same problem.
 [2017-04-13 02:50 UTC] lusc at jiedaibao dot com
mysqlnd_result.c line 429
php_error_docref(NULL, E_WARNING, "Error reading result set's header");

mysqlnd_wireprotocol.c 
line 298 and line 310
php_error_docref(NULL, E_WARNING, "%s", mysqlnd_server_gone);
 [2019-01-15 17:43 UTC] dws dot vad at gmail dot com
7.3.1 this issue actual
 [2020-10-28 14:40 UTC] nikic@php.net
-Status: Open +Status: Closed -Assigned To: +Assigned To: nikic
 [2020-10-28 14:40 UTC] nikic@php.net
This should be fixed since PHP 7.4, by https://github.com/php/php-src/commit/2856afc70e50b85424b2bd2d6653020679160a0b.
 
PHP Copyright © 2001-2024 The PHP Group
All rights reserved.
Last updated: Tue Mar 19 05:01:29 2024 UTC