ID: 49521 Updated by: pierr...@php.net Reported By: waps at pisem dot net Status: Assigned Bug Type: PDO related Operating System: Ubuntu 8.10 x64 PHP Version: 5.2.10 Assigned To: pierrick New Comment:
Patch available at: http://www.adoy.net/php/49521.PHP_5_2.patch http://www.adoy.net/php/49521.PHP_5_3.patch http://www.adoy.net/php/49521.PHP_6_0.patch Previous Comments: ------------------------------------------------------------------------ [2009-11-06 17:07:46] caferrari at gmail dot com Thats evil!... My code with an Ugly solution! <?php class TestObject { public function __construct($id=0, $name='', $mail=''){ // if (isset($this->id)) return; // Ugly solution necessary atm to bypass the problem!. $this->id = $id; $this->name = $nome; $this->mail = $mail; } } $dbh = new PDO('sqlite:'.dirname(__FILE__).'/foo.db'); $qr = $dbh->query("SELECT 1 as id, 'test' as name, 'a...@def.com' as mail"); $x = $qr->fetchObject('TestObject'); print_r($x); Expected: TestObject Object ( [id] => 1 [name] => test [mail] => a...@def.com ) Actual Result: TestObject Object ( [id] => 0 [name] => [mail] => ) ------------------------------------------------------------------------ [2009-09-22 07:06:38] waps at pisem dot net sjoerd, yes! Im my php5 framework phpDays (http://phpdays.sf.net) I faced with this problem. Pleae, fix it in php 5.2.x and 5.3.x and 6.x.x. Thnanks! P.S. Maybe this problem exists in other php components. Need to code review to find this problem in all components. P.P.S. Please, tell me about fix this problem in future. Thanks! ------------------------------------------------------------------------ [2009-09-21 18:45:30] sjo...@php.net Confirmed. If the constructor sets default values for some fields, as is typical, the constructor will overwrite the values just retrieved from the database. <?php class Book { function __construct() { $this->title = "Default"; } } $pdo = new PDO('mysql:dbname=books', 'root'); $statement = $pdo->prepare('SELECT * FROM book WHERE title=\'Peopleware\''); $statement->execute(); $obj = $statement->fetchObject('Book'); echo $obj->title; // Expected: Peopleware. Actual: Default ?> ------------------------------------------------------------------------ [2009-09-10 11:45:31] waps at pisem dot net Description: ------------ Incorrect creating user object: set data before call constructor method. Reproduce code: --------------- --- >From manual page: pdostatement.fetchobject --- class Product { public function __construct() { echo 'create object, '; } public function __set($offset, $value) { echo 'set value, '; } } // fetch object $stmt->fetchObject('Product', array()); Expected result: ---------------- Expected result: create object, set value, Actual result: -------------- Actual result: set value, create object, ------------------------------------------------------------------------ -- Edit this bug report at http://bugs.php.net/?id=49521&edit=1