summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorGeorg Richter <georg@php.net>2003-02-22 07:31:01 +0000
committerGeorg Richter <georg@php.net>2003-02-22 07:31:01 +0000
commitb63fbf276303ad0e5f78c0302afe6c4e45b6d420 (patch)
treea15674fb03f2e0720094721bad01f8c20bb7e73e
parenta7df9995cc4209ad45b3f25b11488bbb2025fb66 (diff)
downloadphp-git-b63fbf276303ad0e5f78c0302afe6c4e45b6d420.tar.gz
Fixed bug with stmt_close (libmysql bk version 1.1477 required)
Fixed bug with mysql_execute and float values
-rw-r--r--ext/mysqli/mysqli.c19
-rw-r--r--ext/mysqli/mysqli_api.c24
-rw-r--r--ext/mysqli/php_mysqli.h12
3 files changed, 29 insertions, 26 deletions
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) \
{ \