diff options
Diffstat (limited to 'ext/mysqli/mysqli_nonapi.c')
-rw-r--r-- | ext/mysqli/mysqli_nonapi.c | 59 |
1 files changed, 32 insertions, 27 deletions
diff --git a/ext/mysqli/mysqli_nonapi.c b/ext/mysqli/mysqli_nonapi.c index cbc932298b..7b6c07d2e3 100644 --- a/ext/mysqli/mysqli_nonapi.c +++ b/ext/mysqli/mysqli_nonapi.c @@ -16,8 +16,6 @@ | Andrey Hristov <andrey@php.net> | | Ulf Wendel <uw@php.net> | +----------------------------------------------------------------------+ - - $Id$ */ #ifdef HAVE_CONFIG_H @@ -35,11 +33,6 @@ #define SAFE_STR(a) ((a)?a:"") -#ifndef zend_parse_parameters_none -#define zend_parse_parameters_none() \ - zend_parse_parameters(ZEND_NUM_ARGS(), "") -#endif - /* {{{ php_mysqli_set_error */ static void php_mysqli_set_error(zend_long mysql_errno, char *mysql_err) @@ -185,7 +178,7 @@ void mysqli_common_connect(INTERNAL_FUNCTION_PARAMETERS, zend_bool is_real_conne MyG(num_active_persistent)++; /* clear error */ - php_mysqli_set_error(mysql_errno(mysql->mysql), (char *) mysql_error(mysql->mysql)); + php_mysqli_set_error(mysql_errno(mysql->mysql), (char *) mysql_error(mysql->mysql)); goto end; } else { @@ -196,12 +189,10 @@ void mysqli_common_connect(INTERNAL_FUNCTION_PARAMETERS, zend_bool is_real_conne } while (0); } } else { - zend_resource le; - le.type = php_le_pmysqli(); - le.ptr = plist = calloc(1, sizeof(mysqli_plist_entry)); + plist = calloc(1, sizeof(mysqli_plist_entry)); zend_ptr_stack_init_ex(&plist->free_links, 1); - zend_hash_str_update_mem(&EG(persistent_list), ZSTR_VAL(hash_key), ZSTR_LEN(hash_key), &le, sizeof(le)); + zend_register_persistent_resource(ZSTR_VAL(hash_key), ZSTR_LEN(hash_key), plist, php_le_pmysqli()); } } } @@ -297,7 +288,7 @@ end: err: if (mysql->hash_key) { - zend_string_release(mysql->hash_key); + zend_string_release_ex(mysql->hash_key, 0); mysql->hash_key = NULL; mysql->persistent = FALSE; } @@ -343,7 +334,7 @@ PHP_FUNCTION(mysqli_connect_error) } /* }}} */ -/* {{{ proto mixed mysqli_fetch_array (object result [,int resulttype]) +/* {{{ proto mixed mysqli_fetch_array(object result [,int resulttype]) Fetch a result row as an associative array, a numeric array, or both */ PHP_FUNCTION(mysqli_fetch_array) { @@ -351,7 +342,7 @@ PHP_FUNCTION(mysqli_fetch_array) } /* }}} */ -/* {{{ proto mixed mysqli_fetch_assoc (object result) +/* {{{ proto mixed mysqli_fetch_assoc(object result) Fetch a result row as an associative array */ PHP_FUNCTION(mysqli_fetch_assoc) { @@ -359,7 +350,7 @@ PHP_FUNCTION(mysqli_fetch_assoc) } /* }}} */ -/* {{{ proto mixed mysqli_fetch_all (object result [,int resulttype]) +/* {{{ proto mixed mysqli_fetch_all(object result [,int resulttype]) Fetches all result rows as an associative array, a numeric array, or both */ #if defined(MYSQLI_USE_MYSQLND) PHP_FUNCTION(mysqli_fetch_all) @@ -412,7 +403,7 @@ PHP_FUNCTION(mysqli_get_connection_stats) #endif /* }}} */ -/* {{{ proto mixed mysqli_error_list (object connection) +/* {{{ proto mixed mysqli_error_list(object connection) Fetches all client errors */ PHP_FUNCTION(mysqli_error_list) { @@ -423,14 +414,14 @@ PHP_FUNCTION(mysqli_error_list) return; } MYSQLI_FETCH_RESOURCE_CONN(mysql, mysql_link, MYSQLI_STATUS_VALID); - array_init(return_value); #if defined(MYSQLI_USE_MYSQLND) - if (mysql->mysql->data->error_info->error_list) { + if (1) { MYSQLND_ERROR_LIST_ELEMENT * message; zend_llist_position pos; - for (message = (MYSQLND_ERROR_LIST_ELEMENT *) zend_llist_get_first_ex(mysql->mysql->data->error_info->error_list, &pos); + array_init(return_value); + for (message = (MYSQLND_ERROR_LIST_ELEMENT *) zend_llist_get_first_ex(&mysql->mysql->data->error_info->error_list, &pos); message; - message = (MYSQLND_ERROR_LIST_ELEMENT *) zend_llist_get_next_ex(mysql->mysql->data->error_info->error_list, &pos)) + message = (MYSQLND_ERROR_LIST_ELEMENT *) zend_llist_get_next_ex(&mysql->mysql->data->error_info->error_list, &pos)) { zval single_error; array_init(&single_error); @@ -439,15 +430,20 @@ PHP_FUNCTION(mysqli_error_list) add_assoc_string_ex(&single_error, "error", sizeof("error") - 1, message->error); add_next_index_zval(return_value, &single_error); } + } else { + ZVAL_EMPTY_ARRAY(return_value); } #else if (mysql_errno(mysql->mysql)) { zval single_error; + array_init(return_value); array_init(&single_error); add_assoc_long_ex(&single_error, "errno", sizeof("errno") - 1, mysql_errno(mysql->mysql)); add_assoc_string_ex(&single_error, "sqlstate", sizeof("sqlstate") - 1, mysql_sqlstate(mysql->mysql)); add_assoc_string_ex(&single_error, "error", sizeof("error") - 1, mysql_error(mysql->mysql)); add_next_index_zval(return_value, &single_error); + } else { + ZVAL_EMPTY_ARRAY(return_value); } #endif } @@ -464,14 +460,14 @@ PHP_FUNCTION(mysqli_stmt_error_list) return; } MYSQLI_FETCH_RESOURCE_STMT(stmt, mysql_stmt, MYSQLI_STATUS_INITIALIZED); - array_init(return_value); #if defined(MYSQLI_USE_MYSQLND) - if (stmt->stmt && stmt->stmt->data && stmt->stmt->data->error_info->error_list) { + if (stmt->stmt && stmt->stmt->data && stmt->stmt->data->error_info) { MYSQLND_ERROR_LIST_ELEMENT * message; zend_llist_position pos; - for (message = (MYSQLND_ERROR_LIST_ELEMENT *) zend_llist_get_first_ex(stmt->stmt->data->error_info->error_list, &pos); + array_init(return_value); + for (message = (MYSQLND_ERROR_LIST_ELEMENT *) zend_llist_get_first_ex(&stmt->stmt->data->error_info->error_list, &pos); message; - message = (MYSQLND_ERROR_LIST_ELEMENT *) zend_llist_get_next_ex(stmt->stmt->data->error_info->error_list, &pos)) + message = (MYSQLND_ERROR_LIST_ELEMENT *) zend_llist_get_next_ex(&stmt->stmt->data->error_info->error_list, &pos)) { zval single_error; array_init(&single_error); @@ -480,21 +476,26 @@ PHP_FUNCTION(mysqli_stmt_error_list) add_assoc_string_ex(&single_error, "error", sizeof("error") - 1, message->error); add_next_index_zval(return_value, &single_error); } + } else { + ZVAL_EMPTY_ARRAY(return_value); } #else if (mysql_stmt_errno(stmt->stmt)) { zval single_error; + array_init(return_value); array_init(&single_error); add_assoc_long_ex(&single_error, "errno", sizeof("errno") - 1, mysql_stmt_errno(stmt->stmt)); add_assoc_string_ex(&single_error, "sqlstate", sizeof("sqlstate") - 1, mysql_stmt_sqlstate(stmt->stmt)); add_assoc_string_ex(&single_error, "error", sizeof("error") - 1, mysql_stmt_error(stmt->stmt)); add_next_index_zval(return_value, &single_error); + } else { + ZVAL_EMPTY_ARRAY(return_value); } #endif } /* }}} */ -/* {{{ proto mixed mysqli_fetch_object (object result [, string class_name [, NULL|array ctor_params]]) +/* {{{ proto mixed mysqli_fetch_object(object result [, string class_name [, NULL|array ctor_params]]) Fetch a result row as an object */ PHP_FUNCTION(mysqli_fetch_object) { @@ -528,6 +529,9 @@ PHP_FUNCTION(mysqli_multi_query) s_errno = mysql_errno(mysql->mysql); #else MYSQLND_ERROR_INFO error_info = *mysql->mysql->data->error_info; + mysql->mysql->data->error_info->error_list.head = NULL; + mysql->mysql->data->error_info->error_list.tail = NULL; + mysql->mysql->data->error_info->error_list.count = 0; #endif MYSQLI_REPORT_MYSQL_ERROR(mysql->mysql); MYSQLI_DISABLE_MQ; @@ -538,6 +542,7 @@ PHP_FUNCTION(mysqli_multi_query) strcpy(mysql->mysql->net.sqlstate, s_sqlstate); mysql->mysql->net.last_errno = s_errno; #else + zend_llist_clean(&mysql->mysql->data->error_info->error_list); *mysql->mysql->data->error_info = error_info; #endif RETURN_FALSE; @@ -750,7 +755,7 @@ static int mysqlnd_dont_poll_zval_array_from_mysqlnd_array(MYSQLND **in_array, z } /* }}} */ -/* {{{ proto int mysqli_poll(array read, array write, array error, long sec [, long usec]) U +/* {{{ proto int mysqli_poll(array read, array write, array error, int sec [, int usec]) U Poll connections */ PHP_FUNCTION(mysqli_poll) { |