]> granicus.if.org Git - php/commitdiff
MFH Fix bug #47145 - As soon as sqlite3_step is called on a statement it always must...
authorScott MacVicar <scottmac@php.net>
Tue, 20 Jan 2009 00:24:13 +0000 (00:24 +0000)
committerScott MacVicar <scottmac@php.net>
Tue, 20 Jan 2009 00:24:13 +0000 (00:24 +0000)
ext/sqlite3/sqlite3.c

index 2b11596e1b5524ec91e485af4cab11d9b4ebb908..cede5c82dfc1ce9dc1a498c834f04827a2fb5561 100644 (file)
@@ -1067,6 +1067,8 @@ PHP_METHOD(sqlite3stmt, execute)
        zval *object = getThis();
        int return_code = 0;
        struct php_sqlite3_bound_param *param;
+       php_sqlite3_free_list *free_item;
+
        stmt_obj = (php_sqlite3_stmt *)zend_object_store_get_object(object TSRMLS_CC);
 
        if (zend_parse_parameters_none() == FAILURE) {
@@ -1140,13 +1142,16 @@ PHP_METHOD(sqlite3stmt, execute)
        }
 
        return_code = sqlite3_step(stmt_obj->stmt);
+       free_item = emalloc(sizeof(php_sqlite3_free_list));
+       free_item->stmt_obj = stmt_obj;
+       free_item->stmt_obj_zval = getThis();
+
+       zend_llist_add_element(&(stmt_obj->db_obj->free_list), &free_item);
 
        switch (return_code) {
                case SQLITE_ROW: /* Valid Row */
                case SQLITE_DONE: /* Valid but no results */
                {
-                       php_sqlite3_free_list *free_item;
-
                        sqlite3_reset(stmt_obj->stmt);
                        object_init_ex(return_value, php_sqlite3_result_entry);
                        result = (php_sqlite3_result *)zend_object_store_get_object(return_value TSRMLS_CC);
@@ -1158,12 +1163,6 @@ PHP_METHOD(sqlite3stmt, execute)
                        result->stmt_obj = stmt_obj;
                        result->stmt_obj_zval = getThis();
 
-                       free_item = emalloc(sizeof(php_sqlite3_free_list));
-                       free_item->stmt_obj = stmt_obj;
-                       free_item->stmt_obj_zval = getThis();
-
-                       zend_llist_add_element(&(stmt_obj->db_obj->free_list), &free_item);
-
                        break;
                }
                case SQLITE_ERROR: