Bug #61843 [Opn->Wfx]: mysqli fetch_object calls __set() before __construct()

From: Date: Tue, 24 Apr 2012 21:35:56 +0000
Subject: Bug #61843 [Opn->Wfx]: mysqli fetch_object calls __set() before __construct()
References: 1  Groups: php.bugs 
Request: Send a blank email to php-bugs+get-169927@lists.php.net to get a copy of this message
Edit report at https://bugs.php.net/bug.php?id=61843&edit=1

 ID:                 61843
 Updated by:         johannes@php.net
 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


Thread (1 message)

  • johannes@php.net
  • Unknown Message
    • johannes@php.net
« previous php.bugs (#169927) next »