Fix bug #47145 - As soon as sqlite3_step is called on a statement it always must be finalised.

This commit is contained in:
Scott MacVicar 2009-01-20 00:24:05 +00:00
parent 06e0b261b3
commit 21a2772da4

View File

@ -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: