diff options
Diffstat (limited to 'ext/mysqli/mysqli.c')
-rw-r--r-- | ext/mysqli/mysqli.c | 25 |
1 files changed, 4 insertions, 21 deletions
diff --git a/ext/mysqli/mysqli.c b/ext/mysqli/mysqli.c index a907eed42f..8653f99c99 100644 --- a/ext/mysqli/mysqli.c +++ b/ext/mysqli/mysqli.c @@ -1271,13 +1271,15 @@ void php_mysqli_fetch_into_hash(INTERNAL_FUNCTION_PARAMETERS, int override_flags zval dataset, retval; zend_fcall_info fci; zend_fcall_info_cache fcc; - zend_bool props_handled = 0; ZVAL_COPY_VALUE(&dataset, return_value); + object_and_properties_init(return_value, ce, NULL); if (!ce->default_properties_count && !ce->__set) { Z_OBJ_P(return_value)->properties = Z_ARR(dataset); - props_handled = 1; + } else { + zend_merge_properties(return_value, Z_ARRVAL(dataset)); + zval_ptr_dtor(&dataset); } if (ce->constructor) { @@ -1297,9 +1299,6 @@ void php_mysqli_fetch_into_hash(INTERNAL_FUNCTION_PARAMETERS, int override_flags * single value is an array. Also we'd have to make that one * argument passed by reference. */ - if (!props_handled) { - zval_ptr_dtor(&dataset); - } zend_throw_exception(zend_ce_exception, "Parameter ctor_params must be an array", 0); return; } @@ -1312,14 +1311,7 @@ void php_mysqli_fetch_into_hash(INTERNAL_FUNCTION_PARAMETERS, int override_flags fcc.object = Z_OBJ_P(return_value); if (zend_call_function(&fci, &fcc) == FAILURE) { - if (fci.params) { - efree(fci.params); - } - if (!props_handled) { - zval_ptr_dtor(&dataset); - } zend_throw_exception_ex(zend_ce_exception, 0, "Could not execute %s::%s()", ZSTR_VAL(ce->name), ZSTR_VAL(ce->constructor->common.function_name)); - return; } else { zval_ptr_dtor(&retval); } @@ -1327,16 +1319,7 @@ void php_mysqli_fetch_into_hash(INTERNAL_FUNCTION_PARAMETERS, int override_flags efree(fci.params); } } else if (ctor_params) { - if (!props_handled) { - zval_ptr_dtor(&dataset); - } zend_throw_exception_ex(zend_ce_exception, 0, "Class %s does not have a constructor hence you cannot use ctor_params", ZSTR_VAL(ce->name)); - return; - } - - if (!props_handled) { - zend_merge_properties(return_value, Z_ARRVAL(dataset)); - zval_ptr_dtor(&dataset); } } } |