]> granicus.if.org Git - php/commitdiff
Revert 290786: Fixed bug #49521 (PDO fetchObject sets values before calling constructor)
authorFelipe Pena <felipe@php.net>
Thu, 18 Mar 2010 22:07:51 +0000 (22:07 +0000)
committerFelipe Pena <felipe@php.net>
Thu, 18 Mar 2010 22:07:51 +0000 (22:07 +0000)
ext/pdo/pdo_stmt.c
ext/pdo_sqlite/tests/bug49521.phpt

index 1e2ce321c7eb659bcc5a532d09564bcf85433bb8..f3ca75ad5fbd2831b8b8ef9297cfc24596e4108e 100755 (executable)
@@ -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;
index 26cd2b21719da6007c925261daaf78331e47020a..7c1518f553ff8c0845856a98560afc1f2c4b1c37 100644 (file)
@@ -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"
 }