diff options
| author | Scott MacVicar <scottmac@php.net> | 2009-01-20 00:24:05 +0000 |
|---|---|---|
| committer | Scott MacVicar <scottmac@php.net> | 2009-01-20 00:24:05 +0000 |
| commit | 21a2772da48ff19429175bf167279951a5f3b69f (patch) | |
| tree | d34e8a8891ee9f7ff7b4c76e30244ba8d7f8f5d6 /ext/sqlite3/sqlite3.c | |
| parent | 06e0b261b3351602a99a5f7e778213e6e8b719f2 (diff) | |
| download | php-git-21a2772da48ff19429175bf167279951a5f3b69f.tar.gz | |
Fix bug #47145 - As soon as sqlite3_step is called on a statement it always must be finalised.
Diffstat (limited to 'ext/sqlite3/sqlite3.c')
| -rw-r--r-- | ext/sqlite3/sqlite3.c | 15 |
1 files changed, 7 insertions, 8 deletions
diff --git a/ext/sqlite3/sqlite3.c b/ext/sqlite3/sqlite3.c index a01fd04cb5..c00ff784fb 100644 --- a/ext/sqlite3/sqlite3.c +++ b/ext/sqlite3/sqlite3.c @@ -1094,6 +1094,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) { @@ -1168,13 +1170,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); @@ -1186,12 +1191,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: |
