]> granicus.if.org Git - php/commitdiff
fixed stmt->stmt->query which was removed in libmysql 4.1.2
authorGeorg Richter <georg@php.net>
Tue, 16 Mar 2004 21:43:25 +0000 (21:43 +0000)
committerGeorg Richter <georg@php.net>
Tue, 16 Mar 2004 21:43:25 +0000 (21:43 +0000)
added query buffer in internal stmt structure to copy string
after prepare

ext/mysqli/mysqli.c
ext/mysqli/mysqli_api.c
ext/mysqli/mysqli_prop.c
ext/mysqli/mysqli_report.c
ext/mysqli/php_mysqli.h

index b2d71457a2ce2966156eea0179e520cfed847689..e8b1a9d9c8e09980704207acf4d006a9054c4c9d 100644 (file)
@@ -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;
 }
index 6a25920f9385227ed1fc9acffcec312c11a069fc..d3ad49837ab2cb6774d6815daf5dc86cbf11e7f3 100644 (file)
@@ -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)
index 18587f89376e528df6575e6ca68e320948efc732..7e230c257b28ab76da659912f3928d90e74719a4 100644 (file)
@@ -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},
index c344fad434e270655a8144f37d094d7e192d24b5..ac7725f92a1ad429c7df32c881335221c0fb1f6d 100644 (file)
@@ -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
index a19c51eaa1d2028ec76d0190a4907bce908e9670..87d2851aec3e706303a9416d164f0d6754eeb9ae 100644 (file)
@@ -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