summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--ext/mysqli/mysqli.c46
-rw-r--r--ext/mysqlnd/mysqlnd_result.c7
2 files changed, 49 insertions, 4 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) {
diff --git a/ext/mysqlnd/mysqlnd_result.c b/ext/mysqlnd/mysqlnd_result.c
index 2079240f64..aca049f831 100644
--- a/ext/mysqlnd/mysqlnd_result.c
+++ b/ext/mysqlnd/mysqlnd_result.c
@@ -1506,6 +1506,9 @@ MYSQLND_METHOD(mysqlnd_res, field_tell)(const MYSQLND_RES * const result TSRMLS_
/* }}} */
+/* for php_addslashes */
+#include "ext/standard/php_string.h"
+
/* {{{ mysqlnd_res::fetch_into */
static void
MYSQLND_METHOD(mysqlnd_res, fetch_into)(MYSQLND_RES * result, unsigned int flags,
@@ -1540,9 +1543,7 @@ MYSQLND_METHOD(mysqlnd_res, fetch_into)(MYSQLND_RES * result, unsigned int flags
break;
default:exit(0);
}
- } else if (extension == MYSQLND_MYSQLI && PG(magic_quotes_runtime)) {
- php_error_docref(NULL TSRMLS_CC, E_ERROR, "magic_quotes_runtime are not supported by mysqlnd. They were deprecated in PHP 5.3 ");
- }
+ }
/*
return_value is IS_NULL for no more data and an array for data. Thus it's ok
to return here.