Edit report at http://bugs.php.net/bug.php?id=39615&edit=1

 ID:                 39615
 Comment by:         bandy dot chris at gmail dot com
 Reported by:        marcos dot neves at gmail dot com
 Summary:            Exception code can not be string
 Status:             Open
 Type:               Feature/Change Request
 Package:            Scripting Engine problem
 Operating System:   *
 PHP Version:        5.2.0
 Block user comment: N
 Private report:     N

 New Comment:

Related to bug 51742.



Allowing a non-numeric $code in the Exception constructor seems like the
right solution.


Previous Comments:
------------------------------------------------------------------------
[2010-08-04 05:22:49] bryan at ravensight dot org

Ubuntu 10.04.1 LTS \n \l

PHP 5.3.2-1ubuntu4.2 with Suhosin-Patch (cli) (built: May 13 2010
20:01:00) 

MySQL Server version: 5.1.41-3ubuntu12.5 (Ubuntu)



When executing a statement which generates:



SQLSTATE[23000]: Integrity constraint violation: 1062 Duplicate entry
'{REDACTED}' for key 'PRIMARY'



The following test does not pass when the exception is caught:



if ($exception->getCode() === 23000)



However, the following code DOES pass when the exception is caught:



if ((int)$exception->getCode() === 23000)



The API documentation for getCode() states that it returns an integer
and that is clearly not the case in this example.



I merely request that the function and the documentation be consistent.

------------------------------------------------------------------------
[2006-11-24 11:33:53] marcos dot neves at gmail dot com

Description:
------------
The follow code is ok, cause 123, even as a string, it can be convert to
number.

new Exception("Message", "123");



The follow is not ok.

new Exception("Message", "NotNumber");



PHP is not a typed language, why Exception must have a number as code?



The problem is that error code doesn´t means "Number error code" but
could be a string error code, like mysql 5.1 uses.



Check the follow reproduce able code.

Reproduce code:
---------------
<?



error_reporting(E_ALL);



$host = "localhost";

$dbName = "test";

$user = "root";

$passwd = "";

$mysqlDsn = "mysql:host=$host;$dbName";



$pdo = new PDO($mysqlDsn, $user, $passwd);

$pdo->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);

try {

        $pdo->query("SELECT version");

}catch(Exception $e){

        $code = $e->getCode(); // 42S22

        echo "<pre>";

        var_dump($code); // string(5) "42S22"

        throw new Exception($e->getMessage(), $code);

}



?>

Expected result:
----------------
The follow line, should accept the $code var, but doesn´t.

throw new Exception($e->getMessage(), $code);



It´s not consistent, since the Exception object constructor can´t accept
a non number as code, but it can return.



See:



$msg = $catchedPdoMysqlException->getMessage();

$code = $catchedPdoMysqlException->getCode();



new Exception($msg, $code); // $code is not valid one.

Actual result:
--------------
Exception code, should accept non numbers as a code value, as mysql
does.


------------------------------------------------------------------------



-- 
Edit this bug report at http://bugs.php.net/bug.php?id=39615&edit=1

Reply via email to