|  support |  documentation |  report a bug |  advanced search |  search howto |  statistics |  random bug |  login
Bug #51742 A non well formed numeric value encountered
Submitted: 2010-05-04 21:29 UTC Modified: 2015-06-06 14:49 UTC
Avg. Score:4.1 ± 0.9
Reproduced:16 of 16 (100.0%)
Same Version:7 (43.8%)
Same OS:9 (56.2%)
From: mike at mikegerwitz dot com Assigned: cmb (profile)
Status: Not a bug Package: PDO Core
PHP Version: 5.3.2 OS: All
Private report: No CVE-ID: None
Welcome back! If you're the original bug submitter, here's where you can edit the bug or add additional notes.
If this is not your bug, you can add a comment by following this link.
If this is your bug, but you forgot your password, you can retrieve your password here.
Bug Type:
From: mike at mikegerwitz dot com
New email:
PHP Version: OS:


 [2010-05-04 21:29 UTC] mike at mikegerwitz dot com
PDOException extends RuntimeException which in turn extends Exception. The 
Exception class has the following constructor:

public __construct ([ string $message = "" [, int $code = 0 [, Exception 
$previous = NULL ]]] )

The $code parameter is to be of type integer. However, when using pdo_odbc or 
pdo_dblib, the error code returned by the server may be a string, rather than an 
integer. So, for example, calling $e->getCode() may yield a value of "12X34". 
This is inconsistent with the method definition as well:

final public int getCode ( void )

PHP's own internal library should not produce outcomes that are in conflict with 
PHP's definitions.

Test script:
    $pdo->query( 'BAD QUERY' );
catch ( PDOException $e )
    throw new Exception( $e->getMessage(), $e->getCode() );

Expected result:
// Just a thrown exception, nothing important

Actual result:
PHP Notice:  A non well formed numeric value encountered in [...] on line 7


Add a Patch

Pull Requests

Add a Pull Request


AllCommentsChangesGit/SVN commitsRelated reports
 [2010-09-17 13:46 UTC] mpartio at gmail dot com
I agree to Mike: PHP should allow non-numeric exception codes. I think this should be pretty easy to fix?
 [2011-04-25 18:35 UTC] bandy dot chris at gmail dot com
Related to bug 39615.
 [2014-01-01 12:49 UTC]
-Package: PDO related +Package: PDO Core
 [2014-04-29 08:02 UTC] hanskrentel at yahoo dot de
PDOException violates the interface here to be able to use the SQLSTATE as code which is not necessarily an integer, but merely a string which might contain a non-numeric value.

Take note that this does not strictly violate the interface, as this has been solved by documenting in the interface that Exception::;getCode() might return a string:

So if you want to deal with this, you need to extend from Exception, override the constructor, save code as a private member and add the getter for it.
 [2014-04-29 08:07 UTC] hanskrentel at yahoo dot de
Here is some working example code, Excpetion::getCode() is final, however Exception::$code protected.

 * Class PDOStatementException
class PDOStatementException extends PDOException
     * @var string
    private $statement;

     * @var string
    protected $code;

    public static function createFrom(PDOException $PDOException, $statement) {

        if (!is_string($statement)) {
            throw new InvalidArgumentException(
                sprintf('Statement must be stirng, %s given', gettype($statement))

        $message  = $PDOException->getMessage() . " in statement '" . $statement . "'";
        $sqlstate = $PDOException->getCode();

        if (!is_string($sqlstate)) {
            throw new LogicException(
                sprintf('Expected type of PDOException::getCode() to be string, %s given', gettype($sqlstate))

        $exception = new PDOStatementException($message, 0, $PDOException);
        $exception->code = $sqlstate;
        $exception->statement = $statement;
        return $exception;

     * @return string
    public function getStatement()
        return $this->statement;
 [2015-06-06 14:49 UTC]
-Status: Open +Status: Not a bug -Assigned To: +Assigned To: cmb
 [2015-06-06 14:49 UTC]
I agree that the situation is somewhat unfortunate, but it is
documented that PDOException does not inherit a public
constructor, and that the return type of Exception::getCode() is

So this is not a bug, but rather a deliberate design decision.
FWIW, there's already request #39615 to allow strings as Exception

[1] <>
PHP Copyright © 2001-2024 The PHP Group
All rights reserved.
Last updated: Thu Jul 18 10:01:29 2024 UTC