diff options
Diffstat (limited to 'ext/mysqli/mysqli_nonapi.c')
-rw-r--r-- | ext/mysqli/mysqli_nonapi.c | 48 |
1 files changed, 30 insertions, 18 deletions
diff --git a/ext/mysqli/mysqli_nonapi.c b/ext/mysqli/mysqli_nonapi.c index 364638c44a..907b1e3fbc 100644 --- a/ext/mysqli/mysqli_nonapi.c +++ b/ext/mysqli/mysqli_nonapi.c @@ -47,7 +47,7 @@ static void php_mysqli_set_error(zend_long mysql_errno, char *mysql_err) } /* }}} */ -void mysqli_common_connect(INTERNAL_FUNCTION_PARAMETERS, zend_bool is_real_connect, zend_bool in_ctor) /* {{{ */ +void mysqli_common_connect(INTERNAL_FUNCTION_PARAMETERS, bool is_real_connect, bool in_ctor) /* {{{ */ { MY_MYSQL *mysql = NULL; MYSQLI_RESOURCE *mysqli_resource = NULL; @@ -56,14 +56,14 @@ void mysqli_common_connect(INTERNAL_FUNCTION_PARAMETERS, zend_bool is_real_conne *ssl_key = NULL, *ssl_cert = NULL, *ssl_ca = NULL, *ssl_capath = NULL, *ssl_cipher = NULL; size_t hostname_len = 0, username_len = 0, passwd_len = 0, dbname_len = 0, socket_len = 0; - zend_bool persistent = FALSE, ssl = FALSE; + bool persistent = FALSE, ssl = FALSE; zend_long port = 0, flags = 0; - zend_bool port_is_null = 1; + bool port_is_null = 1; zend_string *hash_key = NULL; - zend_bool new_connection = FALSE; + bool new_connection = FALSE; zend_resource *le; mysqli_plist_entry *plist = NULL; - zend_bool self_alloced = 0; + bool self_alloced = 0; #if !defined(MYSQL_USE_MYSQLND) @@ -245,7 +245,7 @@ void mysqli_common_connect(INTERNAL_FUNCTION_PARAMETERS, zend_bool is_real_conne #ifndef MYSQLI_USE_MYSQLND if (!(mysql->mysql = mysql_init(NULL))) { #else - if (!(mysql->mysql = mysqlnd_init(MYSQLND_CLIENT_KNOWS_RSET_COPY_DATA, persistent))) { + if (!(mysql->mysql = mysqlnd_init(MYSQLND_CLIENT_NO_FLAG, persistent))) { #endif goto err; } @@ -307,7 +307,7 @@ void mysqli_common_connect(INTERNAL_FUNCTION_PARAMETERS, zend_bool is_real_conne } } if (mysqlnd_connect(mysql->mysql, hostname, username, passwd, passwd_len, dbname, dbname_len, - port, socket, flags, MYSQLND_CLIENT_KNOWS_RSET_COPY_DATA) == NULL) + port, socket, flags, MYSQLND_CLIENT_NO_FLAG) == NULL) #endif { /* Save error messages - for mysqli_connect_error() & mysqli_connect_errno() */ @@ -332,6 +332,12 @@ void mysqli_common_connect(INTERNAL_FUNCTION_PARAMETERS, zend_bool is_real_conne unsigned int allow_local_infile = MyG(allow_local_infile); mysql_options(mysql->mysql, MYSQL_OPT_LOCAL_INFILE, (char *)&allow_local_infile); +#if MYSQL_VERSION_ID >= 80021 || defined(MYSQLI_USE_MYSQLND) + if (MyG(local_infile_directory) && !php_check_open_basedir(MyG(local_infile_directory))) { + mysql_options(mysql->mysql, MYSQL_OPT_LOAD_DATA_LOCAL_DIR, MyG(local_infile_directory)); + } +#endif + end: if (!mysqli_resource) { mysqli_resource = (MYSQLI_RESOURCE *)ecalloc (1, sizeof(MYSQLI_RESOURCE)); @@ -431,28 +437,39 @@ PHP_FUNCTION(mysqli_fetch_assoc) /* }}} */ /* {{{ Fetches all result rows as an associative array, a numeric array, or both */ -#ifdef MYSQLI_USE_MYSQLND PHP_FUNCTION(mysqli_fetch_all) { MYSQL_RES *result; zval *mysql_result; - zend_long mode = MYSQLND_FETCH_NUM; + zend_long mode = MYSQLI_NUM; if (zend_parse_method_parameters(ZEND_NUM_ARGS(), getThis(), "O|l", &mysql_result, mysqli_result_class_entry, &mode) == FAILURE) { RETURN_THROWS(); } MYSQLI_FETCH_RESOURCE(result, MYSQL_RES *, mysql_result, "mysqli_result", MYSQLI_STATUS_VALID); - if (!mode || (mode & ~MYSQLND_FETCH_BOTH)) { + if (!mode || (mode & ~MYSQLI_BOTH)) { zend_argument_value_error(ERROR_ARG_POS(2), "must be one of MYSQLI_FETCH_NUM, " "MYSQLI_FETCH_ASSOC, or MYSQLI_FETCH_BOTH"); RETURN_THROWS(); } - mysqlnd_fetch_all(result, mode, return_value); + array_init_size(return_value, mysql_num_rows(result)); + + zend_ulong i = 0; + do { + zval row; + php_mysqli_fetch_into_hash_aux(&row, result, mode); + if (Z_TYPE(row) != IS_ARRAY) { + zval_ptr_dtor_nogc(&row); + break; + } + add_index_zval(return_value, i++, &row); + } while (1); } /* }}} */ +#ifdef MYSQLI_USE_MYSQLND /* {{{ Returns statistics about the zval cache */ PHP_FUNCTION(mysqli_get_client_stats) { @@ -689,12 +706,7 @@ PHP_FUNCTION(mysqli_query) switch (resultmode & ~MYSQLI_ASYNC) { #endif case MYSQLI_STORE_RESULT: -#ifdef MYSQLI_USE_MYSQLND - if (resultmode & MYSQLI_STORE_RESULT_COPY_DATA) { - result = mysqlnd_store_result_ofs(mysql->mysql); - } else -#endif - result = mysql_store_result(mysql->mysql); + result = mysql_store_result(mysql->mysql); break; case MYSQLI_USE_RESULT: result = mysql_use_result(mysql->mysql); @@ -1197,7 +1209,7 @@ PHP_FUNCTION(mysqli_begin_transaction) #ifndef MYSQLI_USE_MYSQLND /* {{{ */ -static int mysqli_savepoint_libmysql(MYSQL * conn, const char * const name, zend_bool release) +static int mysqli_savepoint_libmysql(MYSQL * conn, const char * const name, bool release) { int ret; char * query; |