From: Georg Richter Date: Sat, 22 Feb 2003 07:31:01 +0000 (+0000) Subject: Fixed bug with stmt_close (libmysql bk version 1.1477 required) X-Git-Tag: RELEASE_0_5~827 X-Git-Url: https://granicus.if.org/sourcecode?a=commitdiff_plain;h=b63fbf276303ad0e5f78c0302afe6c4e45b6d420;p=php Fixed bug with stmt_close (libmysql bk version 1.1477 required) Fixed bug with mysql_execute and float values --- diff --git a/ext/mysqli/mysqli.c b/ext/mysqli/mysqli.c index 0fbe0f514e..361132784d 100644 --- a/ext/mysqli/mysqli.c +++ b/ext/mysqli/mysqli.c @@ -1,8 +1,8 @@ /* +----------------------------------------------------------------------+ - | PHP Version 4 | + | PHP Version 5 | +----------------------------------------------------------------------+ - | Copyright (c) 1997-2002 The PHP Group | + | Copyright (c) 1997-2003 The PHP Group | +----------------------------------------------------------------------+ | This source file is subject to version 2.02 of the PHP license, | | that is bundled with this package in the file LICENSE, and is | @@ -43,11 +43,9 @@ void php_clear_stmt_bind(STMT *stmt) { unsigned int i; - /* - * we don't need to call mysql_stmt_close here. - * in case mysqli_stmt_close wasn't called, all - * statements will be freed via mysql_close - */ + if (stmt->stmt) { + mysql_stmt_close(stmt->stmt); + } if (stmt->var_cnt) { for (i = 0; i < stmt->var_cnt; i++) { @@ -361,10 +359,11 @@ void php_mysqli_fetch_into_hash(INTERNAL_FUNCTION_PARAMETERS, int override_flags MYSQLI_FETCH_RESOURCE(result, MYSQL_RES *, &mysql_result, "mysqli_result"); - array_init(return_value); - fields = mysql_fetch_fields(result); - row = mysql_fetch_row(result); + if (!(row = mysql_fetch_row(result))) { + RETURN_FALSE; + } + array_init(return_value); field_len = mysql_fetch_lengths(result); for (i = 0; i < mysql_num_fields(result); i++) { diff --git a/ext/mysqli/mysqli_api.c b/ext/mysqli/mysqli_api.c index 2f2088454d..56c4056828 100644 --- a/ext/mysqli/mysqli_api.c +++ b/ext/mysqli/mysqli_api.c @@ -1,8 +1,8 @@ /* +----------------------------------------------------------------------+ - | PHP Version 4 | + | PHP Version 5 | +----------------------------------------------------------------------+ - | Copyright (c) 1997-2002 The PHP Group | + | Copyright (c) 1997-2003 The PHP Group | +----------------------------------------------------------------------+ | This source file is subject to version 2.02 of the PHP license, | | that is bundled with this package in the file LICENSE, and is | @@ -385,14 +385,6 @@ PHP_FUNCTION(mysqli_close) MYSQLI_FETCH_RESOURCE(mysql, MYSQL *, &mysql_link, "mysqli_link"); - /* - * Don't free initial struct if there exist - * non closed statements - */ - if (mysql->stmts) { - mysql->free_me = 0; - } - mysql_close(mysql); MYSQLI_CLEAR_RESOURCE(&mysql_link); RETURN_TRUE; @@ -594,7 +586,7 @@ PHP_FUNCTION(mysqli_execute) stmt->stmt->params[i].buffer = Z_STRVAL_PP(&stmt->vars[i]); stmt->stmt->params[i].buffer_length = strlen(Z_STRVAL_PP(&stmt->vars[i])); break; - case MYSQL_TYPE_FLOAT: + case MYSQL_TYPE_DOUBLE: convert_to_double_ex(&stmt->vars[i]); stmt->stmt->params[i].buffer = (gptr)&Z_LVAL_PP(&stmt->vars[i]); break; @@ -663,8 +655,13 @@ PHP_FUNCTION(mysqli_fetch) ZVAL_LONG(stmt->vars[i], lval); } } else { - stmt->bind[i].type = IS_STRING; - ZVAL_STRING(stmt->vars[i], stmt->bind[i].buffer, 1); + if (stmt->vars[i]->type == IS_STRING) { + efree(stmt->vars[i]->value.str.val); + } + ZVAL_STRING(stmt->vars[i], stmt->bind[i].buffer, 1); + /* + stmt->vars[i]->value.str.len = strlen(stmt->bind[i].buffer); + stmt->vars[i]->value.str.val = stmt->bind[i].buffer; */ } break; default: @@ -1530,6 +1527,7 @@ PHP_FUNCTION(mysqli_stmt_close) } MYSQLI_FETCH_RESOURCE(stmt, STMT *, &mysql_stmt, "mysqli_stmt"); mysql_stmt_close(stmt->stmt); + stmt->stmt = NULL; php_clear_stmt_bind(stmt); MYSQLI_CLEAR_RESOURCE(&mysql_stmt); RETURN_TRUE; diff --git a/ext/mysqli/php_mysqli.h b/ext/mysqli/php_mysqli.h index fb34f8f5fd..be3c67d439 100644 --- a/ext/mysqli/php_mysqli.h +++ b/ext/mysqli/php_mysqli.h @@ -1,8 +1,8 @@ /* +----------------------------------------------------------------------+ - | PHP Version 4 | + | PHP Version 5 | +----------------------------------------------------------------------+ - | Copyright (c) 1997-2002 The PHP Group | + | Copyright (c) 1997-2003 The PHP Group | +----------------------------------------------------------------------+ | This source file is subject to version 2.02 of the PHP license, | | that is bundled with this package in the file LICENSE, and is | @@ -113,7 +113,13 @@ PHP_MYSQLI_EXPORT(zend_object_value) mysqli_objects_new(zend_class_entry * TSRML php_error(E_WARNING, "Couldn't fetch %s", intern->zo.ce->name);\ RETURN_NULL();\ }\ -} + if (!strcmp((char *)__name, "mysqli_stmt")) {\ + if (!((STMT *)__ptr)->stmt->mysql) {\ + php_error(E_WARNING, "Statement isn't valid anymore");\ + RETURN_NULL();\ + }\ + }\ +} #define MYSQLI_CLEAR_RESOURCE(__id) \ { \