From: Felipe Pena Date: Thu, 18 Mar 2010 22:07:51 +0000 (+0000) Subject: Revert 290786: Fixed bug #49521 (PDO fetchObject sets values before calling constructor) X-Git-Tag: php-5.2.14RC1~83 X-Git-Url: https://granicus.if.org/sourcecode?a=commitdiff_plain;h=fed2532180128e91a03818c06129c1400a7a5a96;p=php Revert 290786: Fixed bug #49521 (PDO fetchObject sets values before calling constructor) --- diff --git a/ext/pdo/pdo_stmt.c b/ext/pdo/pdo_stmt.c index 1e2ce321c7..f3ca75ad5f 100755 --- a/ext/pdo/pdo_stmt.c +++ b/ext/pdo/pdo_stmt.c @@ -1103,32 +1103,6 @@ static int do_fetch(pdo_stmt_t *stmt, int do_bind, zval *return_value, } } - switch (how) { - case PDO_FETCH_CLASS: - if (ce->constructor && !(flags & PDO_FETCH_PROPS_LATE)) { - stmt->fetch.cls.fci.object_pp = &return_value; - stmt->fetch.cls.fcc.object_pp = &return_value; - if (zend_call_function(&stmt->fetch.cls.fci, &stmt->fetch.cls.fcc TSRMLS_CC) == FAILURE) { - pdo_raise_impl_error(stmt->dbh, stmt, "HY000", "could not call class constructor" TSRMLS_CC); - return 0; - } else { - if (stmt->fetch.cls.retval_ptr) { - zval_ptr_dtor(&stmt->fetch.cls.retval_ptr); - } - } - } - if (flags & PDO_FETCH_CLASSTYPE) { - do_fetch_opt_finish(stmt, 0 TSRMLS_CC); - stmt->fetch.cls.ce = old_ce; - stmt->fetch.cls.ctor_args = old_ctor_args; - stmt->fetch.cls.fci.param_count = old_arg_count; - } - break; - - default: - break; - } - for (idx = 0; i < stmt->column_count; i++, idx++) { zval *val; MAKE_STD_ZVAL(val); @@ -1262,6 +1236,27 @@ static int do_fetch(pdo_stmt_t *stmt, int do_bind, zval *return_value, } switch (how) { + case PDO_FETCH_CLASS: + if (ce->constructor && !(flags & PDO_FETCH_PROPS_LATE)) { + stmt->fetch.cls.fci.object_pp = &return_value; + stmt->fetch.cls.fcc.object_pp = &return_value; + if (zend_call_function(&stmt->fetch.cls.fci, &stmt->fetch.cls.fcc TSRMLS_CC) == FAILURE) { + pdo_raise_impl_error(stmt->dbh, stmt, "HY000", "could not call class constructor" TSRMLS_CC); + return 0; + } else { + if (stmt->fetch.cls.retval_ptr) { + zval_ptr_dtor(&stmt->fetch.cls.retval_ptr); + } + } + } + if (flags & PDO_FETCH_CLASSTYPE) { + do_fetch_opt_finish(stmt, 0 TSRMLS_CC); + stmt->fetch.cls.ce = old_ce; + stmt->fetch.cls.ctor_args = old_ctor_args; + stmt->fetch.cls.fci.param_count = old_arg_count; + } + break; + case PDO_FETCH_FUNC: stmt->fetch.func.fci.param_count = idx; stmt->fetch.func.fci.retval_ptr_ptr = &retval; diff --git a/ext/pdo_sqlite/tests/bug49521.phpt b/ext/pdo_sqlite/tests/bug49521.phpt index 26cd2b2171..7c1518f553 100644 --- a/ext/pdo_sqlite/tests/bug49521.phpt +++ b/ext/pdo_sqlite/tests/bug49521.phpt @@ -33,7 +33,7 @@ var_dump($statement->fetchObject('Book', array(1))); Book::__construct object(Book)#%d (2) { [%u|b%"title"]=> - string(3) "PHP" + string(0) "" [%u|b%"author"]=> string(6) "Rasmus" }