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

From: Date: Tue, 24 Apr 2012 19:49:30 +0000
Subject: Bug #61843 [Opn]: mysqli fetch_object calls __set() before __construct()
References: 1  Groups: php.bugs 
Request: Send a blank email to php-bugs+get-169926@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
 User updated by:    jdolieslager at gmail dot com
 Reported by:        jdolieslager at gmail dot com
 Summary:            mysqli fetch_object calls __set() before
                     __construct()
 Status:             Open
 Type:               Bug
-Package:            mysql
+Package:            MySQLi related
 Operating System:   Windows 7 x64
 PHP Version:        5.3.10
 Block user comment: N
 Private report:     N

 New Comment:

** Changed to correct package category


Previous Comments:
------------------------------------------------------------------------
[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)

  • jdolieslager at gmail dot com
  • Unknown Message
    • jdolieslager at gmail dot com
« previous php.bugs (#169926) next »