summaryrefslogtreecommitdiff
path: root/ext/mysqli/mysqli.c
diff options
context:
space:
mode:
Diffstat (limited to 'ext/mysqli/mysqli.c')
-rw-r--r--ext/mysqli/mysqli.c46
1 files changed, 45 insertions, 1 deletions
diff --git a/ext/mysqli/mysqli.c b/ext/mysqli/mysqli.c
index f92ba0cb49..474541fecb 100644
--- a/ext/mysqli/mysqli.c
+++ b/ext/mysqli/mysqli.c
@@ -1172,6 +1172,7 @@ void php_mysqli_fetch_into_hash(INTERNAL_FUNCTION_PARAMETERS, int override_flags
/* check if we need magic quotes */
if (PG(magic_quotes_runtime)) {
+ php_error_docref(NULL TSRMLS_CC, E_WARNING, "magic_quotes_runtime are deprecated since PHP 5.3");
Z_TYPE_P(res) = IS_STRING;
Z_STRVAL_P(res) = php_addslashes(row[i], field_len[i], &Z_STRLEN_P(res), 0 TSRMLS_CC);
} else {
@@ -1198,7 +1199,50 @@ void php_mysqli_fetch_into_hash(INTERNAL_FUNCTION_PARAMETERS, int override_flags
}
}
#else
- mysqlnd_fetch_into(result, ((fetchtype & MYSQLI_NUM)? MYSQLND_FETCH_NUM:0) | ((fetchtype & MYSQLI_ASSOC)? MYSQLND_FETCH_ASSOC:0), return_value, MYSQLND_MYSQLI);
+ if (PG(magic_quotes_runtime)) {
+ HashPosition pos_values;
+ zval **entry_values;
+ zval new_return_value;
+ char * string_key;
+ uint string_key_len;
+ ulong num_key;
+ php_error_docref(NULL TSRMLS_CC, E_WARNING, "magic_quotes_runtime are deprecated since PHP 5.3");
+
+ array_init(return_value);
+
+ mysqlnd_fetch_into(result, ((fetchtype & MYSQLI_NUM)? MYSQLND_FETCH_NUM:0) | ((fetchtype & MYSQLI_ASSOC)? MYSQLND_FETCH_ASSOC:0), &new_return_value, MYSQLND_MYSQLI);
+
+ zend_hash_internal_pointer_reset_ex(Z_ARRVAL(new_return_value), &pos_values);
+ while (zend_hash_get_current_data_ex(Z_ARRVAL(new_return_value), (void **)&entry_values, &pos_values) == SUCCESS) {
+ if (Z_TYPE_PP(entry_values) == IS_STRING) {
+ int new_str_len;
+ char * new_str = php_addslashes(Z_STRVAL_PP(entry_values), Z_STRLEN_PP(entry_values), &new_str_len, 0 TSRMLS_CC);
+ switch (zend_hash_get_current_key_ex(Z_ARRVAL(new_return_value), &string_key, &string_key_len, &num_key, 0, &pos_values)) {
+ case HASH_KEY_IS_LONG:
+ add_index_stringl(return_value, num_key, new_str, new_str_len, 0);
+ break;
+ case HASH_KEY_IS_STRING:
+ add_assoc_stringl_ex(return_value, string_key, string_key_len, new_str, new_str_len, 0);
+ break;
+ }
+ } else {
+ zval_add_ref(entry_values);
+ switch (zend_hash_get_current_key_ex(Z_ARRVAL(new_return_value), &string_key, &string_key_len, &num_key, 0, &pos_values)) {
+ case HASH_KEY_IS_LONG:
+ add_index_zval(return_value, num_key, *entry_values);
+ break;
+ case HASH_KEY_IS_STRING:
+ add_assoc_zval_ex(return_value, string_key, string_key_len, *entry_values);
+ break;
+ }
+ }
+ zend_hash_move_forward_ex(Z_ARRVAL(new_return_value), &pos_values);
+ }
+ zval_dtor(&new_return_value);
+ } else {
+ mysqlnd_fetch_into(result, ((fetchtype & MYSQLI_NUM)? MYSQLND_FETCH_NUM:0) | ((fetchtype & MYSQLI_ASSOC)? MYSQLND_FETCH_ASSOC:0), return_value, MYSQLND_MYSQLI);
+ }
+
#endif
if (into_object && Z_TYPE_P(return_value) != IS_NULL) {