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

 ID:                 61843
 Updated by:         [email protected]
 Reported by:        jdolieslager at gmail dot com
 Summary:            mysqli fetch_object calls __set() before
                     __construct()
-Status:             Open
+Status:             Wont fix
 Type:               Bug
 Package:            MySQLi related
 Operating System:   Windows 7 x64
 PHP Version:        5.3.10
 Block user comment: N
 Private report:     N

 New Comment:

Unfortunately we can't fix this as many people depend on the current behavior 
where people can access the data from within the constructor.

If you check history this wasactually "fixed" once but then reverted.


Previous Comments:
------------------------------------------------------------------------
[2012-04-24 19:49:30] jdolieslager at gmail dot com

** Changed to correct package category

------------------------------------------------------------------------
[2012-04-24 19:45:14] jdolieslager at gmail dot com

Description:
------------
I retrieve a record from the database and want to store into an object. This 
will be a dataobject that does basically validate the values. I noticed that 
the constructor will be called after the magic function __set has been called. 
This should be the other way around.


=============== SYSTEM INFO ==================

System  Windows NT JESPER-LT 6.1 build 7601 (Windows 7 Ultimate Edition Service 
Pack 1) i586
Build Date      Feb 2 2012 20:26:31
Compiler        MSVC9 (Visual C++ 2008)
Architecture    x86
Configure Command       cscript /nologo configure.js "--enable-snapshot-build" 
"--disable-isapi" "--enable-debug-pack" "--disable-isapi" "--without-mssql" 
"--without-pdo-mssql" "--without-pi3web" 
"--with-pdo-oci=C:\php-sdk\oracle\instantclient10\sdk,shared" 
"--with-oci8=C:\php-sdk\oracle\instantclient10\sdk,shared" 
"--with-oci8-11g=C:\php-sdk\oracle\instantclient11\sdk,shared" 
"--enable-object-out-dir=../obj/" "--enable-com-dotnet" "--with-mcrypt=static" 
"--disable-static-analyze" 

===============================================

================ MYSQLI =======================
MysqlI Support  enabled
Client API library version      mysqlnd 5.0.8-dev - 20102224 - $Revision: 
321634 $
Active Persistent Links         0
Inactive Persistent Links       0
Active Links    0

Directive       Local Value     Master Value
mysqli.allow_local_infile       On      On
mysqli.allow_persistent On      On
mysqli.default_host     no value        no value
mysqli.default_port     3306    3306
mysqli.default_pw       no value        no value
mysqli.default_socket   no value        no value
mysqli.default_user     no value        no value
mysqli.max_links        Unlimited       Unlimited
mysqli.max_persistent   Unlimited       Unlimited
mysqli.reconnect        Off     Off

=====================================================

Beneath you'll find a basic example of the bug. 

The database structure I use for this example:
CREATE TABLE `users` (
        `id` INT(10) UNSIGNED NOT NULL AUTO_INCREMENT,
        `username` VARCHAR(50) NOT NULL,
        `password` VARCHAR(50) NOT NULL,
        `created` DATETIME NULL DEFAULT NULL,
        PRIMARY KEY (`id`),
        UNIQUE INDEX `username` (`username`)
)


Test script:
---------------
class foo {
    function __construct() {
        echo '__construct() <br />';
    }
    
    function __set($key, $value) {
        echo '__set() <br />';
    }
}

$mysql = new mysqli('127.0.0.1', 'root', '', 'test');
$rs = $mysql->query('SELECT id, username, password FROM users');
$obj = $rs->fetch_object('foo');

Expected result:
----------------
__construct()
__set()
__set()
__set()

Actual result:
--------------
__set()
__set()
__set()
__construct()


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



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

Reply via email to