Bug #64705 [Com]: errorInfo property of PDOException is null when PDO::__construct() fails
| From: | corey dot taylor dot fl at gmail dot com | Date: | Mon, 10 Aug 2020 13:28:37 +0000 |
| Subject: | Bug #64705 [Com]: errorInfo property of PDOException is null when PDO::__construct() fails | ||
| References: | 1 | Groups: | php.bugs |
| Request: | Send a blank email to php-bugs+get-228490@lists.php.net to get a copy of this message | ||
Edit report at https://bugs.php.net/bug.php?id=64705&edit=1
ID: 64705
Comment by: corey dot taylor dot fl at gmail dot com
Reported by: christian dot lawrence at calorieking dot com
Summary: errorInfo property of PDOException is null when
PDO::__construct() fails
Status: Verified
Type: Bug
Package: PDO related
PHP Version: 5.3.24
Block user comment: N
Private report: N
New Comment:
I've run into this same issue recently. When Azure Sql Databases is "paused", the
only way to get that error is through the db code. However errorInfo is not set when this
PDOException is thrown from PDO::__construct().
I see there is a PR associated. Is there any chance the issue with that PR can be solved for 8.0 if
there is an ABI issue?
Previous Comments:
------------------------------------------------------------------------
[2019-02-17 22:36:19]
The following pull request has been associated:
Patch Name: Fix #64705 PDO driver constructor throw PDOException but not setting errorInfo
On GitHub: https://github.com/php/php-src/pull/3843
Patch: https://github.com/php/php-src/pull/3843.patch
------------------------------------------------------------------------
[2014-06-04 09:12:30] mbeccati@php.net
I started writing a new common phpt file in order to check the behaviour of drivers other then pgsql
and it seems that pdo_sqlite and pdo_mysql are affected too, so I'm changing the bug type to
PDO Core.
------------------------------------------------------------------------
[2013-04-24 17:11:36] christian dot lawrence at calorieking dot com
Description:
------------
PDO::__construct() will always throw a PDOException if the connection fails regardless of which
PDO::ATTR_ERRMODE is currently set. The PDOException has a public property $errorInfo which
corresponds to PDO::errorInfo() or PDOStatement::errorInfo().
When PDO::__construct() throws a PDOException say, because of a database server issue, the public
property PDOException::$errorInfo is set to NULL and the return value from PDOException::getCode()
is not the expected string SQLSTATE error code.
I would have expected a non-NULL PDOException::$errorInfo to be set when the exception is caught.
Test script:
---------------
<?php
// Valid DSN, but with wrong password to trigger the exception
$dsn = 'pgsql:host=localhost;dbname=test;user=foo;password=wrongpass';
try {
$pdo = new \PDO($dsn, null, null);
} catch (\PDOException $e) {
var_dump($e->errorInfo);
var_dump($e->getCode());
var_dump($e->getMessage());
}
?>
Expected result:
----------------
array(3) {
[0] =>
string(5) "08006"
[1] =>
int(7)
[2] =>
string(53) "FATAL: password authentication failed for user "foo""
}
string(5) "08006"
string(73) "SQLSTATE[08006] [7] FATAL: password authentication failed for user
"foo""
Actual result:
--------------
NULL
int(7)
string(73) "SQLSTATE[08006] [7] FATAL: password authentication failed for user
"foo""
------------------------------------------------------------------------
--
Edit this bug report at https://bugs.php.net/bug.php?id=64705&edit=1