diff options
-rw-r--r-- | ext/mysqli/mysqli.c | 6 | ||||
-rw-r--r-- | ext/mysqli/mysqli_api.c | 23 | ||||
-rw-r--r-- | ext/mysqli/mysqli_prop.c | 2 | ||||
-rw-r--r-- | ext/mysqli/mysqli_report.c | 2 | ||||
-rw-r--r-- | ext/mysqli/php_mysqli.h | 2 |
5 files changed, 31 insertions, 4 deletions
diff --git a/ext/mysqli/mysqli.c b/ext/mysqli/mysqli.c index b2d71457a2..e8b1a9d9c8 100644 --- a/ext/mysqli/mysqli.c +++ b/ext/mysqli/mysqli.c @@ -64,11 +64,14 @@ void php_free_stmt_bind_buffer(BIND_BUFFER bbuf, int type) } for (i=0; i < bbuf.var_cnt; i++) { + + /* free temporary bind buffer */ if (type == FETCH_RESULT) { if (bbuf.buf[i].type == IS_STRING) { efree(bbuf.buf[i].val); } } + if (bbuf.vars[i]) { zval_ptr_dtor(&bbuf.vars[i]); } @@ -96,6 +99,9 @@ void php_clear_stmt_bind(STMT *stmt) php_free_stmt_bind_buffer(stmt->param, FETCH_SIMPLE); php_free_stmt_bind_buffer(stmt->result, FETCH_RESULT); + if (stmt->query) { + efree(stmt->query); + } efree(stmt); return; } diff --git a/ext/mysqli/mysqli_api.c b/ext/mysqli/mysqli_api.c index 6a25920f93..d3ad49837a 100644 --- a/ext/mysqli/mysqli_api.c +++ b/ext/mysqli/mysqli_api.c @@ -578,7 +578,7 @@ PHP_FUNCTION(mysqli_stmt_execute) RETURN_FALSE; } if (MyG(report_mode) & MYSQLI_REPORT_INDEX) { - php_mysqli_report_index(stmt->stmt->query, stmt->stmt->mysql->server_status TSRMLS_CC); + php_mysqli_report_index(stmt->query, stmt->stmt->mysql->server_status TSRMLS_CC); } RETURN_TRUE; @@ -1225,6 +1225,8 @@ PHP_FUNCTION(mysqli_prepare) mysqli_resource = (MYSQLI_RESOURCE *)ecalloc (1, sizeof(MYSQLI_RESOURCE)); mysqli_resource->ptr = (void *)stmt; + stmt->query = (query_len) ? (char *)emalloc(query_len + 1) : NULL; + strcpy(stmt->query, query); MYSQLI_RETURN_RESOURCE(mysqli_resource, mysqli_stmt_class_entry); } /* }}} */ @@ -1502,6 +1504,25 @@ PHP_FUNCTION(mysqli_stmt_free_result) return; } /* }}} */ + +/* {{{ proto void mysqli_stmt_reset(object stmt) + reset a prepared statement */ +PHP_FUNCTION(mysqli_stmt_reset) +{ + STMT *stmt; + zval *mysql_stmt; + + if (zend_parse_method_parameters(ZEND_NUM_ARGS() TSRMLS_CC, getThis(), "O", &mysql_stmt, mysqli_stmt_class_entry) == FAILURE) { + return; + } + + MYSQLI_FETCH_RESOURCE(stmt, STMT *, &mysql_stmt, "mysqli_stmt"); + + mysql_stmt_reset(stmt->stmt); + + return; +} +/* }}} */ #endif /* {{{ proto mixed mysqli_stmt_num_rows(object stmt) diff --git a/ext/mysqli/mysqli_prop.c b/ext/mysqli/mysqli_prop.c index 18587f8937..7e230c257b 100644 --- a/ext/mysqli/mysqli_prop.c +++ b/ext/mysqli/mysqli_prop.c @@ -189,7 +189,6 @@ MYSQLI_MAP_PROPERTY_LONG_LONG(stmt_affected_rows_read, STMT, stmt->mysql->last_u MYSQLI_MAP_PROPERTY_LONG_LONG(stmt_affected_rows_read, STMT, stmt->affected_rows); #endif MYSQLI_MAP_PROPERTY_LONG_LONG(stmt_num_rows_read, STMT, stmt->result->row_count); -MYSQLI_MAP_PROPERTY_STRING(stmt_query_read, STMT, stmt->query); MYSQLI_MAP_PROPERTY_LONG(stmt_param_count_read, STMT, stmt->param_count); MYSQLI_MAP_PROPERTY_LONG(stmt_field_count_read, STMT, stmt->field_count); MYSQLI_MAP_PROPERTY_LONG(stmt_id_read, STMT, stmt->stmt_id); @@ -236,7 +235,6 @@ mysqli_property_entry mysqli_result_property_entries[] = { mysqli_property_entry mysqli_stmt_property_entries[] = { {"affected_rows", stmt_affected_rows_read, NULL}, {"num_rows", stmt_num_rows_read, NULL}, - {"query", stmt_query_read, NULL}, {"param_count", stmt_param_count_read, NULL}, {"field_count", stmt_field_count_read, NULL}, {"id", stmt_id_read, NULL}, diff --git a/ext/mysqli/mysqli_report.c b/ext/mysqli/mysqli_report.c index c344fad434..ac7725f92a 100644 --- a/ext/mysqli/mysqli_report.c +++ b/ext/mysqli/mysqli_report.c @@ -62,7 +62,7 @@ void php_mysqli_report_index(char *query, unsigned int status TSRMLS_DC) { } else { return; } - php_error_docref(NULL TSRMLS_CC, E_WARNING, "%s used in query %s", index, query); + php_error_docref(NULL TSRMLS_CC, E_WARNING, "%s used in query/prepared statement %s", index, query); #else return; #endif diff --git a/ext/mysqli/php_mysqli.h b/ext/mysqli/php_mysqli.h index a19c51eaa1..87d2851aec 100644 --- a/ext/mysqli/php_mysqli.h +++ b/ext/mysqli/php_mysqli.h @@ -47,6 +47,7 @@ typedef struct { MYSQL_STMT *stmt; BIND_BUFFER param; BIND_BUFFER result; + char *query; } STMT; typedef struct { @@ -349,6 +350,7 @@ PHP_FUNCTION(mysqli_stmt_errno); PHP_FUNCTION(mysqli_stmt_error); #ifndef HAVE_MYSQLI_OLDAPI PHP_FUNCTION(mysqli_stmt_free_result); +PHP_FUNCTION(mysqli_stmt_reset); #endif PHP_FUNCTION(mysqli_stmt_num_rows); #if MYSQL_VERSION_ID >= 40101 |