diff --git a/ext/pdo/pdo_stmt.c b/ext/pdo/pdo_stmt.c index 1e2ce321c7e..f3ca75ad5fb 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 26cd2b21719..7c1518f553f 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" }