Changeset 74
- Timestamp:
- 07/19/08 14:33:37 (1 month ago)
- Files:
-
- trunk/config.m4 (modified) (1 diff)
- trunk/php_sqlite3.h (modified) (3 diffs)
- trunk/sqlite3.c (modified) (45 diffs)
Legend:
- Unmodified
- Added
- Removed
- Modified
- Copied
- Moved
trunk/config.m4
r67 r74 8 8 dnl when running phpize enable_maintainer_zts is not available 9 9 if test -z "$enable_maintainer_zts"; then 10 ZTS=`grep '#define ZTS' $phpincludedir/main/php_config.h|$SED 's/#define ZTS//'` 11 if test "$ZTS" -eq "1"; then 12 enable_maintainer_zts="yes" 10 if test -f "$phpincludedir/main/php_config.h"; then 11 ZTS=`grep '#define ZTS' $phpincludedir/main/php_config.h|$SED 's/#define ZTS//'` 12 if test "$ZTS" -eq "1"; then 13 enable_maintainer_zts="yes" 14 fi 13 15 fi 14 16 fi trunk/php_sqlite3.h
r65 r74 106 106 typedef struct _php_sqlite3_db_object { 107 107 zend_object zo; 108 int initialised; 108 109 sqlite3 *db; 109 110 php_sqlite3_func *funcs; 110 111 111 112 zend_llist stmt_list; 112 } php_sqlite3_db ;113 } php_sqlite3_db_object; 113 114 114 115 /* sqlite3 objects to be destroyed */ … … 124 125 zend_object zo; 125 126 sqlite3_stmt **intern_stmt; 126 php_sqlite3_db *db_object; 127 127 php_sqlite3_db_object *db_obj; 128 int initialised; 129 128 130 int is_prepared_statement; 129 131 int complete; … … 137 139 zend_object zo; 138 140 sqlite3_stmt *stmt; 139 php_sqlite3_db *db_object; 141 php_sqlite3_db_object *db_obj; 142 int initialised; 140 143 141 144 /* Keep track of the zvals for bound parameters */ trunk/sqlite3.c
r71 r74 62 62 PHP_METHOD(sqlite3, open) 63 63 { 64 php_sqlite3_db *db;64 php_sqlite3_db_object *db_obj; 65 65 zval *object = getThis(); 66 66 char *filename, *encryption_key, *fullpath; 67 67 int filename_len, encryption_key_len, flags = SQLITE_OPEN_READWRITE | SQLITE_OPEN_CREATE; 68 db = (php_sqlite3_db*)zend_object_store_get_object(object TSRMLS_CC);68 db_obj = (php_sqlite3_db_object *)zend_object_store_get_object(object TSRMLS_CC); 69 69 70 70 if (FAILURE == zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "s|ls", 71 71 &filename, &filename_len, &flags, &encryption_key, &encryption_key_len)) { 72 72 return; 73 } 74 75 if (db_obj->initialised) { 76 php_error_docref(NULL TSRMLS_CC, E_NOTICE, "Already initialised DB Object"); 73 77 } 74 78 … … 93 97 } 94 98 95 if (db->db) {96 sqlite3_close(db->db);97 db->db = NULL;98 }99 100 99 #if SQLITE_VERSION_NUMBER >= 3005000 && PHP_MAJOR_VERSION >= 5 && PHP_MINOR_VERSION >= 3 101 if (sqlite3_open_v2(fullpath, &(db ->db), flags, NULL) != SQLITE_OK) {100 if (sqlite3_open_v2(fullpath, &(db_obj->db), flags, NULL) != SQLITE_OK) { 102 101 #else 103 if (sqlite3_open(fullpath, &(db ->db)) != SQLITE_OK) {102 if (sqlite3_open(fullpath, &(db_obj->db)) != SQLITE_OK) { 104 103 #endif 105 php_error_docref(NULL TSRMLS_CC, E_NOTICE, "Unable to open database: %s", sqlite3_errmsg(db ->db));104 php_error_docref(NULL TSRMLS_CC, E_NOTICE, "Unable to open database: %s", sqlite3_errmsg(db_obj->db)); 106 105 if (fullpath) { 107 106 efree(fullpath); … … 110 109 } 111 110 111 db_obj->initialised = 1; 112 112 113 #if SQLITE_HAS_CODEC 113 114 if (encryption_key_len > 0) { 114 if (sqlite3_key(db ->db, encryption_key, encryption_key_len) != SQLITE_OK) {115 if (sqlite3_key(db_obj->db, encryption_key, encryption_key_len) != SQLITE_OK) { 115 116 return; 116 117 } … … 123 124 #endif 124 125 (PG(open_basedir) && *PG(open_basedir))) { 125 sqlite3_set_authorizer(db ->db, php_sqlite3_authorizer, NULL);126 sqlite3_set_authorizer(db_obj->db, php_sqlite3_authorizer, NULL); 126 127 } 127 128 … … 138 139 PHP_METHOD(sqlite3, close) 139 140 { 140 php_sqlite3_db *db;141 php_sqlite3_db_object *db_obj; 141 142 zval *object = getThis(); 142 143 int errcode; 143 db = (php_sqlite3_db*)zend_object_store_get_object(object TSRMLS_CC);144 db_obj = (php_sqlite3_db_object *)zend_object_store_get_object(object TSRMLS_CC); 144 145 145 146 if (ZEND_NUM_ARGS() != 0) { … … 147 148 } 148 149 149 zend_llist_clean(&(db->stmt_list)); 150 errcode = sqlite3_close(db->db); 151 if (errcode != SQLITE_OK) { 152 php_error_docref(NULL TSRMLS_CC, E_WARNING, "Unable to close database: %d, %s", errcode, sqlite3_errmsg(db->db)); 153 RETURN_FALSE; 154 } 155 156 db->db = NULL; 150 zend_llist_clean(&(db_obj->stmt_list)); 151 if (db_obj->initialised) { 152 errcode = sqlite3_close(db_obj->db); 153 if (errcode != SQLITE_OK) { 154 php_error_docref(NULL TSRMLS_CC, E_WARNING, "Unable to close database: %d, %s", errcode, sqlite3_errmsg(db_obj->db)); 155 RETURN_FALSE; 156 } 157 db_obj->initialised = 0; 158 } 157 159 158 160 RETURN_TRUE; … … 165 167 PHP_METHOD(sqlite3, exec) 166 168 { 167 php_sqlite3_db *db;169 php_sqlite3_db_object *db_obj; 168 170 zval *object = getThis(); 169 171 char *sql, *errtext = NULL; 170 172 int sql_len; 171 db = (php_sqlite3_db*)zend_object_store_get_object(object TSRMLS_CC);173 db_obj = (php_sqlite3_db_object *)zend_object_store_get_object(object TSRMLS_CC); 172 174 173 175 if (FAILURE == zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "s", … … 176 178 } 177 179 178 if (sqlite3_exec(db ->db, sql, NULL, NULL, &errtext) != SQLITE_OK) {180 if (sqlite3_exec(db_obj->db, sql, NULL, NULL, &errtext) != SQLITE_OK) { 179 181 php_error_docref(NULL TSRMLS_CC, E_WARNING, "%s", errtext); 180 182 sqlite3_free(errtext); … … 209 211 PHP_METHOD(sqlite3, lastInsertRowID) 210 212 { 211 php_sqlite3_db *db;212 zval *object = getThis(); 213 db = (php_sqlite3_db*)zend_object_store_get_object(object TSRMLS_CC);213 php_sqlite3_db_object *db_obj; 214 zval *object = getThis(); 215 db_obj = (php_sqlite3_db_object *)zend_object_store_get_object(object TSRMLS_CC); 214 216 215 217 if (ZEND_NUM_ARGS() != 0) { … … 217 219 } 218 220 219 RETURN_LONG(sqlite3_last_insert_rowid(db ->db));221 RETURN_LONG(sqlite3_last_insert_rowid(db_obj->db)); 220 222 } 221 223 /* }}} */ … … 226 228 PHP_METHOD(sqlite3, lastErrorCode) 227 229 { 228 php_sqlite3_db *db;229 zval *object = getThis(); 230 db = (php_sqlite3_db*)zend_object_store_get_object(object TSRMLS_CC);230 php_sqlite3_db_object *db_obj; 231 zval *object = getThis(); 232 db_obj = (php_sqlite3_db_object *)zend_object_store_get_object(object TSRMLS_CC); 231 233 232 234 if (ZEND_NUM_ARGS() != 0) { … … 234 236 } 235 237 236 RETURN_LONG(sqlite3_errcode(db ->db));238 RETURN_LONG(sqlite3_errcode(db_obj->db)); 237 239 } 238 240 /* }}} */ … … 243 245 PHP_METHOD(sqlite3, lastErrorMsg) 244 246 { 245 php_sqlite3_db *db;246 zval *object = getThis(); 247 db = (php_sqlite3_db*)zend_object_store_get_object(object TSRMLS_CC);247 php_sqlite3_db_object *db_obj; 248 zval *object = getThis(); 249 db_obj = (php_sqlite3_db_object *)zend_object_store_get_object(object TSRMLS_CC); 248 250 249 251 if (ZEND_NUM_ARGS() != 0) { … … 251 253 } 252 254 253 RETVAL_STRING((char *)sqlite3_errmsg(db ->db), 1);255 RETVAL_STRING((char *)sqlite3_errmsg(db_obj->db), 1); 254 256 } 255 257 /* }}} */ … … 260 262 PHP_METHOD(sqlite3, loadExtension) 261 263 { 262 php_sqlite3_db *db;264 php_sqlite3_db_object *db_obj; 263 265 zval *object = getThis(); 264 266 char *extension, *lib_path, *extension_dir, *errtext = NULL; 265 267 char fullpath[MAXPATHLEN]; 266 268 int extension_len, extension_dir_len; 267 db = (php_sqlite3_db*)zend_object_store_get_object(object TSRMLS_CC);269 db_obj = (php_sqlite3_db_object *)zend_object_store_get_object(object TSRMLS_CC); 268 270 269 271 if (FAILURE == zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "s", … … 305 307 306 308 /* Extension loading should only be enabled for when we attempt to load */ 307 sqlite3_enable_load_extension(db ->db, 1);308 if (sqlite3_load_extension(db ->db, fullpath, 0, &errtext) != SQLITE_OK) {309 sqlite3_enable_load_extension(db_obj->db, 1); 310 if (sqlite3_load_extension(db_obj->db, fullpath, 0, &errtext) != SQLITE_OK) { 309 311 php_error_docref(NULL TSRMLS_CC, E_WARNING, "%s", errtext); 310 312 sqlite3_free(errtext); 311 sqlite3_enable_load_extension(db ->db, 0);312 RETURN_FALSE; 313 } 314 sqlite3_enable_load_extension(db ->db, 0);313 sqlite3_enable_load_extension(db_obj->db, 0); 314 RETURN_FALSE; 315 } 316 sqlite3_enable_load_extension(db_obj->db, 0); 315 317 316 318 RETURN_TRUE; … … 323 325 PHP_METHOD(sqlite3, changes) 324 326 { 325 php_sqlite3_db *db;326 zval *object = getThis(); 327 db = (php_sqlite3_db*)zend_object_store_get_object(object TSRMLS_CC);327 php_sqlite3_db_object *db_obj; 328 zval *object = getThis(); 329 db_obj = (php_sqlite3_db_object *)zend_object_store_get_object(object TSRMLS_CC); 328 330 329 331 if (ZEND_NUM_ARGS() != 0) { … … 331 333 } 332 334 333 RETURN_LONG(sqlite3_changes(db ->db));335 RETURN_LONG(sqlite3_changes(db_obj->db)); 334 336 } 335 337 /* }}} */ … … 340 342 PHP_METHOD(sqlite3, escapeString) 341 343 { 342 php_sqlite3_db *db;344 php_sqlite3_db_object *db_obj; 343 345 zval *object = getThis(); 344 346 char *sql, *ret; 345 347 int sql_len; 346 db = (php_sqlite3_db*)zend_object_store_get_object(object TSRMLS_CC);348 db_obj = (php_sqlite3_db_object *)zend_object_store_get_object(object TSRMLS_CC); 347 349 348 350 if (FAILURE == zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "s", … … 368 370 PHP_METHOD(sqlite3, prepare) 369 371 { 370 php_sqlite3_db *db;372 php_sqlite3_db_object *db_obj; 371 373 php_sqlite3_stmt *internp; 372 374 zval *object = getThis(); 373 375 char *sql; 374 376 int sql_len, errcode; 375 db = (php_sqlite3_db*)zend_object_store_get_object(object TSRMLS_CC);377 db_obj = (php_sqlite3_db_object *)zend_object_store_get_object(object TSRMLS_CC); 376 378 377 379 if (FAILURE == zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "s", … … 386 388 object_init_ex(return_value, php_sqlite3_stmt_entry); 387 389 internp = (php_sqlite3_stmt *)zend_object_store_get_object(return_value TSRMLS_CC); 388 internp->db_obj ect = db;389 390 errcode = sqlite3_prepare_v2(db ->db, sql, sql_len, &(internp->stmt), NULL);390 internp->db_obj = db_obj; 391 392 errcode = sqlite3_prepare_v2(db_obj->db, sql, sql_len, &(internp->stmt), NULL); 391 393 if (errcode != SQLITE_OK) { 392 php_error_docref(NULL TSRMLS_CC, E_WARNING, "Unable to prepare statement: %d, %s", errcode, sqlite3_errmsg(db ->db));394 php_error_docref(NULL TSRMLS_CC, E_WARNING, "Unable to prepare statement: %d, %s", errcode, sqlite3_errmsg(db_obj->db)); 393 395 RETURN_FALSE; 394 396 } … … 401 403 PHP_METHOD(sqlite3, query) 402 404 { 403 php_sqlite3_db *db;405 php_sqlite3_db_object *db_obj; 404 406 php_sqlite3_result *result; 405 407 zval *object = getThis(); 406 408 char *sql, *errtext = NULL; 407 409 int sql_len, return_code; 408 db = (php_sqlite3_db*)zend_object_store_get_object(object TSRMLS_CC);410 db_obj = (php_sqlite3_db_object *)zend_object_store_get_object(object TSRMLS_CC); 409 411 410 412 if (FAILURE == zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "s", … … 419 421 /* If there was no return value then just execute the query */ 420 422 if (!return_value_used) { 421 if (sqlite3_exec(db ->db, sql, NULL, NULL, &errtext) != SQLITE_OK) {423 if (sqlite3_exec(db_obj->db, sql, NULL, NULL, &errtext) != SQLITE_OK) { 422 424 php_error_docref(NULL TSRMLS_CC, E_WARNING, "%s", errtext); 423 425 sqlite3_free(errtext); … … 428 430 object_init_ex(return_value, php_sqlite3_result_entry); 429 431 result = (php_sqlite3_result *)zend_object_store_get_object(return_value TSRMLS_CC); 430 result->db_obj ect = db;431 432 return_code = sqlite3_prepare_v2(db ->db, sql, sql_len, result->intern_stmt, NULL);432 result->db_obj = db_obj; 433 434 return_code = sqlite3_prepare_v2(db_obj->db, sql, sql_len, result->intern_stmt, NULL); 433 435 if (return_code != SQLITE_OK) { 434 php_error_docref(NULL TSRMLS_CC, E_WARNING, "Unable to prepare statement: %d, %s", return_code, sqlite3_errmsg(db ->db));436 php_error_docref(NULL TSRMLS_CC, E_WARNING, "Unable to prepare statement: %d, %s", return_code, sqlite3_errmsg(db_obj->db)); 435 437 efree(result->intern_stmt); 436 438 result->intern_stmt = NULL; … … 462 464 free_item->result_object = return_value; 463 465 Z_ADDREF_P(return_value); 464 zend_llist_add_element(&(db ->stmt_list), &free_item);466 zend_llist_add_element(&(db_obj->stmt_list), &free_item); 465 467 sqlite3_reset(*(result->intern_stmt)); 466 468 break; 467 469 } 468 470 default: 469 php_error_docref(NULL TSRMLS_CC, E_WARNING, "Unable to execute statement: %s", sqlite3_errmsg(db ->db));471 php_error_docref(NULL TSRMLS_CC, E_WARNING, "Unable to execute statement: %s", sqlite3_errmsg(db_obj->db)); 470 472 sqlite3_finalize(*(result->intern_stmt)); 471 473 RETURN_FALSE; … … 511 513 PHP_METHOD(sqlite3, querySingle) 512 514 { 513 php_sqlite3_db *db;515 php_sqlite3_db_object *db_obj; 514 516 zval *object = getThis(); 515 517 char *sql, *errtext = NULL; 516 518 int sql_len, return_code, entire_row = 0; 517 519 sqlite3_stmt *stmt; 518 db = (php_sqlite3_db*)zend_object_store_get_object(object TSRMLS_CC);520 db_obj = (php_sqlite3_db_object *)zend_object_store_get_object(object TSRMLS_CC); 519 521 520 522 if (FAILURE == zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "s|b", … … 529 531 /* If there was no return value then just execute the query */ 530 532 if (!return_value_used) { 531 if (sqlite3_exec(db ->db, sql, NULL, NULL, &errtext) != SQLITE_OK) {533 if (sqlite3_exec(db_obj->db, sql, NULL, NULL, &errtext) != SQLITE_OK) { 532 534 php_error_docref(NULL TSRMLS_CC, E_WARNING, "%s", errtext); 533 535 sqlite3_free(errtext); … … 536 538 } 537 539 538 return_code = sqlite3_prepare_v2(db ->db, sql, sql_len, &stmt, NULL);540 return_code = sqlite3_prepare_v2(db_obj->db, sql, sql_len, &stmt, NULL); 539 541 if (return_code != SQLITE_OK) { 540 php_error_docref(NULL TSRMLS_CC, E_WARNING, "Unable to prepare statement: %d, %s", return_code, sqlite3_errmsg(db ->db));542 php_error_docref(NULL TSRMLS_CC, E_WARNING, "Unable to prepare statement: %d, %s", return_code, sqlite3_errmsg(db_obj->db)); 541 543 RETURN_FALSE; 542 544 } … … 576 578 } 577 579 default: 578 php_error_docref(NULL TSRMLS_CC, E_WARNING, "Unable to execute statement: %s", sqlite3_errmsg(db ->db));580 php_error_docref(NULL TSRMLS_CC, E_WARNING, "Unable to execute statement: %s", sqlite3_errmsg(db_obj->db)); 579 581 RETVAL_FALSE; 580 582 } … … 662 664 /* clean up the params */ 663 665 if (argc) { 664 for (i = is_agg; i < argc ; i++) {666 for (i = is_agg; i < argc + is_agg; i++) { 665 667 zval_ptr_dtor(zargs[i]); 666 668 efree(zargs[i]); … … 753 755 PHP_METHOD(sqlite3, createFunction) 754 756 { 755 php_sqlite3_db *db;757 php_sqlite3_db_object *db_obj; 756 758 zval *object = getThis(); 757 759 php_sqlite3_func *func; … … 761 763 long sql_func_num_args = -1; 762 764 763 db = (php_sqlite3_db*)zend_object_store_get_object(object TSRMLS_CC);765 db_obj = (php_sqlite3_db_object *)zend_object_store_get_object(object TSRMLS_CC); 764 766 765 767 if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "sz|l", &sql_func, &sql_func_len, &callback_func, &sql_func_num_args) == FAILURE) { … … 780 782 func = (php_sqlite3_func *)ecalloc(1, sizeof(*func)); 781 783 782 if (sqlite3_create_function(db ->db, sql_func, sql_func_num_args, SQLITE_UTF8, func, php_sqlite3_callback_func, NULL, NULL) == SQLITE_OK) {784 if (sqlite3_create_function(db_obj->db, sql_func, sql_func_num_args, SQLITE_UTF8, func, php_sqlite3_callback_func, NULL, NULL) == SQLITE_OK) { 783 785 func->func_name = estrdup(sql_func); 784 786 … … 788 790 789 791 func->argc = sql_func_num_args; 790 func->next = db ->funcs;791 db ->funcs = func;792 func->next = db_obj->funcs; 793 db_obj->funcs = func; 792 794 793 795 RETURN_TRUE; … … 804 806 PHP_METHOD(sqlite3, createAggregate) 805 807 { 806 php_sqlite3_db *db;808 php_sqlite3_db_object *db_obj; 807 809 zval *object = getThis(); 808 810 php_sqlite3_func *func; … … 812 814 long sql_func_num_args = -1; 813 815 814 db = (php_sqlite3_db*)zend_object_store_get_object(object TSRMLS_CC);816 db_obj = (php_sqlite3_db_object *)zend_object_store_get_object(object TSRMLS_CC); 815 817 816 818 if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "szz|l", &sql_func, &sql_func_len, &step_callback, &fini_callback, &sql_func_num_args) == FAILURE) { … … 838 840 func = (php_sqlite3_func *)ecalloc(1, sizeof(*func)); 839 841 840 if (sqlite3_create_function(db ->db, sql_func, sql_func_num_args, SQLITE_UTF8, func, NULL, php_sqlite3_callback_step, php_sqlite3_callback_final) == SQLITE_OK) {842 if (sqlite3_create_function(db_obj->db, sql_func, sql_func_num_args, SQLITE_UTF8, func, NULL, php_sqlite3_callback_step, php_sqlite3_callback_final) == SQLITE_OK) { 841 843 func->func_name = estrdup(sql_func); 842 844 … … 850 852 851 853 func->argc = sql_func_num_args; 852 func->next = db ->funcs;853 db ->funcs = func;854 func->next = db_obj->funcs; 855 db_obj->funcs = func; 854 856 855 857 RETURN_TRUE; … … 893 895 } 894 896 895 zend_llist_del_element(&(internp->db_obj ect->stmt_list), internp->stmt,897 zend_llist_del_element(&(internp->db_obj->stmt_list), internp->stmt, 896 898 (int (*)(void *, void *)) php_sqlite3_compare_stmt_free); 897 899 … … 1241 1243 Z_ADDREF_P(return_value); 1242 1244 1243 zend_llist_add_element(&(internp->db_obj ect->stmt_list), &free_item);1245 zend_llist_add_element(&(internp->db_obj->stmt_list), &free_item); 1244 1246 /* We don't need the default one that came with it now */ 1245 1247 … … 1248 1250 result->intern_stmt = &internp->stmt; 1249 1251 result->num_rows = num_rows; 1250 result->db_obj ect = internp->db_object;1252 result->db_obj = internp->db_obj; 1251 1253 break; 1252 1254 } … … 1428 1430 /* We need to finalize an internal statement */ 1429 1431 if (internp->is_prepared_statement == 0) { 1430 zend_llist_del_element(&(internp->db_obj ect->stmt_list), *(internp->intern_stmt),1432 zend_llist_del_element(&(internp->db_obj->stmt_list), *(internp->intern_stmt), 1431 1433 (int (*)(void *, void *)) php_sqlite3_compare_stmt_free); 1432 1434 } else { … … 1695 1697 static void php_sqlite3_object_free_storage(void *object TSRMLS_DC) 1696 1698 { 1697 php_sqlite3_db *intern = (php_sqlite3_db*)object;1699 php_sqlite3_db_object *intern = (php_sqlite3_db_object *)object; 1698 1700 php_sqlite3_func *func; 1699 1701 … … 1785 1787 zval *tmp; 1786 1788 zend_object_value retval; 1787 php_sqlite3_db *intern;1789 php_sqlite3_db_object *intern; 1788 1790 1789 1791 /* Allocate memory for it */ 1790 intern = emalloc(sizeof(php_sqlite3_db)); 1791 memset(&intern->zo, 0, sizeof(php_sqlite3_db)); 1792 1792 intern = emalloc(sizeof(php_sqlite3_db_object)); 1793 memset(&intern->zo, 0, sizeof(php_sqlite3_db_object)); 1794 1795 /* Non standard stuff, not sure if this is really required still */ 1793 1796 zend_llist_init(&(intern->stmt_list), sizeof(php_sqlite3_stmt_free_list *), (llist_dtor_func_t)php_sqlite3_stmt_free, 0); 1794 intern->db = NULL; 1797 1795 1798 zend_object_std_init(&intern->zo, class_type TSRMLS_CC); 1796 1799 zend_hash_copy(intern->zo.properties, &class_type->default_properties, (copy_ctor_func_t) zval_add_ref,(void *) &tmp, sizeof(zval *)); … … 1812 1815 memset(&intern->zo, 0, sizeof(php_sqlite3_stmt)); 1813 1816 1814 intern->stmt = NULL;1815 1817 zend_object_std_init(&intern->zo, class_type TSRMLS_CC); 1816 1818 zend_hash_copy(intern->zo.properties, &class_type->default_properties, (copy_ctor_func_t) zval_add_ref,(void *) &tmp, sizeof(zval *));
