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

Reply via email to