Search code examples
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