phppdomysqlnd

Why PDO generates warnings when we tell it not to do it?


Problem

We tell PDO to wrap each issue into exception. In some cases it generates a few warnings and only then throws exception.

Why does it do it?

Duplicates?

There were no correct answers on SO regarding it. Last question was PHP PDO Exception + Warning on MySQL Has Gone Away? but people just marked it as duplicate instead of carefully answer.

Accepted answer not answers why does it do it and when. So I researched and will answer.


Solution

  • It's because of PDO could use mysqlnd driver, which not respects any of PDO's "convert-issues-to-extensions" policy.

    Just look at sources of mysqlnd driver.

    We clearly see there direct calls to php_error_docref.

    And one of examples, shown at previous question explained by these lines: https://github.com/php/php-src/blob/PHP-5.5.31/ext/mysqlnd/mysqlnd_wireprotocol.c#L35:L61