diff options
Diffstat (limited to 'ext/mysqli/mysqli.c')
-rw-r--r-- | ext/mysqli/mysqli.c | 112 |
1 files changed, 34 insertions, 78 deletions
diff --git a/ext/mysqli/mysqli.c b/ext/mysqli/mysqli.c index 928ef8ea76..85847e7a3b 100644 --- a/ext/mysqli/mysqli.c +++ b/ext/mysqli/mysqli.c @@ -70,7 +70,7 @@ zend_class_entry *mysqli_warning_class_entry; zend_class_entry *mysqli_exception_class_entry; -typedef int (*mysqli_read_t)(mysqli_object *obj, zval *rv, zend_bool quiet); +typedef int (*mysqli_read_t)(mysqli_object *obj, zval *rv, bool quiet); typedef int (*mysqli_write_t)(mysqli_object *obj, zval *newval); typedef struct _mysqli_prop_handler { @@ -277,7 +277,7 @@ static void mysqli_warning_free_storage(zend_object *object) /* }}} */ /* {{{ mysqli_read_na */ -static int mysqli_read_na(mysqli_object *obj, zval *retval, zend_bool quiet) +static int mysqli_read_na(mysqli_object *obj, zval *retval, bool quiet) { if (!quiet) { zend_throw_error(NULL, "Cannot read property"); @@ -499,6 +499,7 @@ PHP_INI_BEGIN() #endif STD_PHP_INI_BOOLEAN("mysqli.reconnect", "0", PHP_INI_SYSTEM, OnUpdateLong, reconnect, zend_mysqli_globals, mysqli_globals) STD_PHP_INI_BOOLEAN("mysqli.allow_local_infile", "0", PHP_INI_SYSTEM, OnUpdateLong, allow_local_infile, zend_mysqli_globals, mysqli_globals) + STD_PHP_INI_ENTRY("mysqli.local_infile_directory", NULL, PHP_INI_SYSTEM, OnUpdateString, local_infile_directory, zend_mysqli_globals, mysqli_globals) PHP_INI_END() /* }}} */ @@ -509,9 +510,9 @@ static PHP_GINIT_FUNCTION(mysqli) ZEND_TSRMLS_CACHE_UPDATE(); #endif mysqli_globals->num_links = 0; + mysqli_globals->max_links = -1; mysqli_globals->num_active_persistent = 0; mysqli_globals->num_inactive_persistent = 0; - mysqli_globals->max_links = -1; mysqli_globals->max_persistent = -1; mysqli_globals->allow_persistent = 1; mysqli_globals->default_port = 0; @@ -520,9 +521,9 @@ static PHP_GINIT_FUNCTION(mysqli) mysqli_globals->default_pw = NULL; mysqli_globals->default_socket = NULL; mysqli_globals->reconnect = 0; - mysqli_globals->report_mode = 0; - mysqli_globals->report_ht = 0; + mysqli_globals->report_mode = MYSQLI_REPORT_ERROR|MYSQLI_REPORT_STRICT;; mysqli_globals->allow_local_infile = 0; + mysqli_globals->local_infile_directory = NULL; mysqli_globals->rollback_on_cached_plink = FALSE; } /* }}} */ @@ -530,8 +531,6 @@ static PHP_GINIT_FUNCTION(mysqli) /* {{{ PHP_MINIT_FUNCTION */ PHP_MINIT_FUNCTION(mysqli) { - zend_class_entry *ce,cex; - REGISTER_INI_ENTRIES(); #ifndef MYSQLI_USE_MYSQLND if (mysql_server_init(0, NULL, NULL)) { @@ -564,99 +563,54 @@ PHP_MINIT_FUNCTION(mysqli) le_pmysqli = zend_register_list_destructors_ex(NULL, php_mysqli_dtor, "MySqli persistent connection", module_number); - INIT_CLASS_ENTRY(cex, "mysqli_sql_exception", class_mysqli_sql_exception_methods); - mysqli_exception_class_entry = zend_register_internal_class_ex(&cex, spl_ce_RuntimeException); - mysqli_exception_class_entry->ce_flags |= ZEND_ACC_FINAL; - zend_declare_property_long(mysqli_exception_class_entry, "code", sizeof("code")-1, 0, ZEND_ACC_PROTECTED); - zend_declare_property_string(mysqli_exception_class_entry, "sqlstate", sizeof("sqlstate")-1, "00000", ZEND_ACC_PROTECTED); + mysqli_exception_class_entry = register_class_mysqli_sql_exception(spl_ce_RuntimeException); - REGISTER_MYSQLI_CLASS_ENTRY("mysqli_driver", mysqli_driver_class_entry, class_mysqli_driver_methods); - ce = mysqli_driver_class_entry; + mysqli_driver_class_entry = register_class_mysqli_driver(); + mysqli_driver_class_entry->create_object = mysqli_objects_new; zend_hash_init(&mysqli_driver_properties, 0, NULL, free_prop_handler, 1); MYSQLI_ADD_PROPERTIES(&mysqli_driver_properties, mysqli_driver_property_entries); - zend_declare_property_null(ce, "client_info", sizeof("client_info") - 1, ZEND_ACC_PUBLIC); - zend_declare_property_null(ce, "client_version", sizeof("client_version") - 1, ZEND_ACC_PUBLIC); - zend_declare_property_null(ce, "driver_version", sizeof("driver_version") - 1, ZEND_ACC_PUBLIC); - zend_declare_property_null(ce, "reconnect", sizeof("reconnect") - 1, ZEND_ACC_PUBLIC); - zend_declare_property_null(ce, "report_mode", sizeof("report_mode") - 1, ZEND_ACC_PUBLIC); - ce->ce_flags |= ZEND_ACC_FINAL; - zend_hash_add_ptr(&classes, ce->name, &mysqli_driver_properties); - - REGISTER_MYSQLI_CLASS_ENTRY("mysqli", mysqli_link_class_entry, class_mysqli_methods); - ce = mysqli_link_class_entry; + zend_hash_add_ptr(&classes, mysqli_driver_class_entry->name, &mysqli_driver_properties); + + mysqli_link_class_entry = register_class_mysqli(); + mysqli_link_class_entry->create_object = mysqli_objects_new; zend_hash_init(&mysqli_link_properties, 0, NULL, free_prop_handler, 1); MYSQLI_ADD_PROPERTIES(&mysqli_link_properties, mysqli_link_property_entries); - zend_declare_property_null(ce, "affected_rows", sizeof("affected_rows") - 1, ZEND_ACC_PUBLIC); - zend_declare_property_null(ce, "client_info", sizeof("client_info") - 1, ZEND_ACC_PUBLIC); - zend_declare_property_null(ce, "client_version", sizeof("client_version") - 1, ZEND_ACC_PUBLIC); - zend_declare_property_null(ce, "connect_errno", sizeof("connect_errno") - 1, ZEND_ACC_PUBLIC); - zend_declare_property_null(ce, "connect_error", sizeof("connect_error") - 1, ZEND_ACC_PUBLIC); - zend_declare_property_null(ce, "errno", sizeof("errno") - 1, ZEND_ACC_PUBLIC); - zend_declare_property_null(ce, "error", sizeof("error") - 1, ZEND_ACC_PUBLIC); - zend_declare_property_null(ce, "error_list", sizeof("error_list") - 1, ZEND_ACC_PUBLIC); - zend_declare_property_null(ce, "field_count", sizeof("field_count") - 1, ZEND_ACC_PUBLIC); - zend_declare_property_null(ce, "host_info", sizeof("host_info") - 1, ZEND_ACC_PUBLIC); - zend_declare_property_null(ce, "info", sizeof("info") - 1, ZEND_ACC_PUBLIC); - zend_declare_property_null(ce, "insert_id", sizeof("insert_id") - 1, ZEND_ACC_PUBLIC); - zend_declare_property_null(ce, "server_info", sizeof("server_info") - 1, ZEND_ACC_PUBLIC); - zend_declare_property_null(ce, "server_version", sizeof("server_version") - 1, ZEND_ACC_PUBLIC); - zend_declare_property_null(ce, "sqlstate", sizeof("sqlstate") - 1, ZEND_ACC_PUBLIC); - zend_declare_property_null(ce, "protocol_version", sizeof("protocol_version") - 1, ZEND_ACC_PUBLIC); - zend_declare_property_null(ce, "thread_id", sizeof("thread_id") - 1, ZEND_ACC_PUBLIC); - zend_declare_property_null(ce, "warning_count", sizeof("warning_count") - 1, ZEND_ACC_PUBLIC); - zend_hash_add_ptr(&classes, ce->name, &mysqli_link_properties); - - REGISTER_MYSQLI_CLASS_ENTRY("mysqli_warning", mysqli_warning_class_entry, class_mysqli_warning_methods); - ce = mysqli_warning_class_entry; - ce->ce_flags |= ZEND_ACC_FINAL; + zend_hash_add_ptr(&classes, mysqli_link_class_entry->name, &mysqli_link_properties); + + mysqli_warning_class_entry = register_class_mysqli_warning(); + mysqli_warning_class_entry->create_object = mysqli_objects_new; zend_hash_init(&mysqli_warning_properties, 0, NULL, free_prop_handler, 1); MYSQLI_ADD_PROPERTIES(&mysqli_warning_properties, mysqli_warning_property_entries); - zend_declare_property_null(ce, "message", sizeof("message") - 1, ZEND_ACC_PUBLIC); - zend_declare_property_null(ce, "sqlstate", sizeof("sqlstate") - 1, ZEND_ACC_PUBLIC); - zend_declare_property_null(ce, "errno", sizeof("errno") - 1, ZEND_ACC_PUBLIC); - zend_hash_add_ptr(&classes, ce->name, &mysqli_warning_properties); + zend_hash_add_ptr(&classes, mysqli_warning_class_entry->name, &mysqli_warning_properties); - REGISTER_MYSQLI_CLASS_ENTRY("mysqli_result", mysqli_result_class_entry, class_mysqli_result_methods); - ce = mysqli_result_class_entry; + mysqli_result_class_entry = register_class_mysqli_result(zend_ce_aggregate); + mysqli_result_class_entry->create_object = mysqli_objects_new; + mysqli_result_class_entry->get_iterator = php_mysqli_result_get_iterator; zend_hash_init(&mysqli_result_properties, 0, NULL, free_prop_handler, 1); MYSQLI_ADD_PROPERTIES(&mysqli_result_properties, mysqli_result_property_entries); - zend_declare_property_null(ce, "current_field", sizeof("current_field") - 1,ZEND_ACC_PUBLIC); - zend_declare_property_null(ce, "field_count", sizeof("field_count") - 1, ZEND_ACC_PUBLIC); - zend_declare_property_null(ce, "lengths", sizeof("lengths") - 1, ZEND_ACC_PUBLIC); - zend_declare_property_null(ce, "num_rows", sizeof("num_rows") - 1, ZEND_ACC_PUBLIC); - zend_declare_property_null(ce, "type", sizeof("type") - 1, ZEND_ACC_PUBLIC); - mysqli_result_class_entry->get_iterator = php_mysqli_result_get_iterator; - zend_class_implements(mysqli_result_class_entry, 1, zend_ce_aggregate); - zend_hash_add_ptr(&classes, ce->name, &mysqli_result_properties); + zend_hash_add_ptr(&classes, mysqli_result_class_entry->name, &mysqli_result_properties); - REGISTER_MYSQLI_CLASS_ENTRY("mysqli_stmt", mysqli_stmt_class_entry, class_mysqli_stmt_methods); - ce = mysqli_stmt_class_entry; + mysqli_stmt_class_entry = register_class_mysqli_stmt(); + mysqli_stmt_class_entry->create_object = mysqli_objects_new; zend_hash_init(&mysqli_stmt_properties, 0, NULL, free_prop_handler, 1); MYSQLI_ADD_PROPERTIES(&mysqli_stmt_properties, mysqli_stmt_property_entries); - zend_declare_property_null(ce, "affected_rows", sizeof("affected_rows") - 1, ZEND_ACC_PUBLIC); - zend_declare_property_null(ce, "insert_id", sizeof("insert_id") - 1, ZEND_ACC_PUBLIC); - zend_declare_property_null(ce, "num_rows", sizeof("num_rows") - 1, ZEND_ACC_PUBLIC); - zend_declare_property_null(ce, "param_count", sizeof("param_count") - 1, ZEND_ACC_PUBLIC); - zend_declare_property_null(ce, "field_count", sizeof("field_count") - 1, ZEND_ACC_PUBLIC); - zend_declare_property_null(ce, "errno", sizeof("errno") - 1, ZEND_ACC_PUBLIC); - zend_declare_property_null(ce, "error", sizeof("error") - 1, ZEND_ACC_PUBLIC); - zend_declare_property_null(ce, "error_list", sizeof("error_list") - 1, ZEND_ACC_PUBLIC); - zend_declare_property_null(ce, "sqlstate", sizeof("sqlstate") - 1, ZEND_ACC_PUBLIC); - zend_declare_property_null(ce, "id", sizeof("id") - 1, ZEND_ACC_PUBLIC); - zend_hash_add_ptr(&classes, ce->name, &mysqli_stmt_properties); + zend_hash_add_ptr(&classes, mysqli_stmt_class_entry->name, &mysqli_stmt_properties); /* mysqli_options */ REGISTER_LONG_CONSTANT("MYSQLI_READ_DEFAULT_GROUP", MYSQL_READ_DEFAULT_GROUP, CONST_CS | CONST_PERSISTENT); REGISTER_LONG_CONSTANT("MYSQLI_READ_DEFAULT_FILE", MYSQL_READ_DEFAULT_FILE, CONST_CS | CONST_PERSISTENT); REGISTER_LONG_CONSTANT("MYSQLI_OPT_CONNECT_TIMEOUT", MYSQL_OPT_CONNECT_TIMEOUT, CONST_CS | CONST_PERSISTENT); REGISTER_LONG_CONSTANT("MYSQLI_OPT_LOCAL_INFILE", MYSQL_OPT_LOCAL_INFILE, CONST_CS | CONST_PERSISTENT); +#if MYSQL_VERSION_ID >= 80021 || defined(MYSQLI_USE_MYSQLND) + REGISTER_LONG_CONSTANT("MYSQLI_OPT_LOAD_DATA_LOCAL_DIR", MYSQL_OPT_LOAD_DATA_LOCAL_DIR, CONST_CS | CONST_PERSISTENT); +#endif REGISTER_LONG_CONSTANT("MYSQLI_INIT_COMMAND", MYSQL_INIT_COMMAND, CONST_CS | CONST_PERSISTENT); REGISTER_LONG_CONSTANT("MYSQLI_OPT_READ_TIMEOUT", MYSQL_OPT_READ_TIMEOUT, CONST_CS | CONST_PERSISTENT); #ifdef MYSQLI_USE_MYSQLND REGISTER_LONG_CONSTANT("MYSQLI_OPT_NET_CMD_BUFFER_SIZE", MYSQLND_OPT_NET_CMD_BUFFER_SIZE, CONST_CS | CONST_PERSISTENT); REGISTER_LONG_CONSTANT("MYSQLI_OPT_NET_READ_BUFFER_SIZE", MYSQLND_OPT_NET_READ_BUFFER_SIZE, CONST_CS | CONST_PERSISTENT); #endif -#ifdef MYSQLND_STRING_TO_INT_CONVERSION +#ifdef MYSQLI_USE_MYSQLND REGISTER_LONG_CONSTANT("MYSQLI_OPT_INT_AND_FLOAT_NATIVE", MYSQLND_OPT_INT_AND_FLOAT_NATIVE, CONST_CS | CONST_PERSISTENT); #endif #if MYSQL_VERSION_ID < 80000 || MYSQL_VERSION_ID >= 100000 || defined(MYSQLI_USE_MYSQLND) @@ -805,6 +759,8 @@ PHP_MINIT_FUNCTION(mysqli) REGISTER_LONG_CONSTANT("MYSQLI_REFRESH_HOSTS", REFRESH_HOSTS, CONST_CS | CONST_PERSISTENT); REGISTER_LONG_CONSTANT("MYSQLI_REFRESH_STATUS", REFRESH_STATUS, CONST_CS | CONST_PERSISTENT); REGISTER_LONG_CONSTANT("MYSQLI_REFRESH_THREADS", REFRESH_THREADS, CONST_CS | CONST_PERSISTENT); + REGISTER_LONG_CONSTANT("MYSQLI_REFRESH_REPLICA", REFRESH_SLAVE, CONST_CS | CONST_PERSISTENT); + /* temporarily for backward compatibility */ REGISTER_LONG_CONSTANT("MYSQLI_REFRESH_SLAVE", REFRESH_SLAVE, CONST_CS | CONST_PERSISTENT); REGISTER_LONG_CONSTANT("MYSQLI_REFRESH_MASTER", REFRESH_MASTER, CONST_CS | CONST_PERSISTENT); #ifdef REFRESH_BACKUP_LOG @@ -870,7 +826,7 @@ PHP_RINIT_FUNCTION(mysqli) #endif MyG(error_msg) = NULL; MyG(error_no) = 0; - MyG(report_mode) = 0; + MyG(report_mode) = MYSQLI_REPORT_ERROR|MYSQLI_REPORT_STRICT; return SUCCESS; } @@ -1069,7 +1025,7 @@ void php_mysqli_fetch_into_hash_aux(zval *return_value, MYSQL_RES * result, zend MYSQL_ROW row; unsigned int i, num_fields; MYSQL_FIELD *fields; - zend_ulong *field_len; + unsigned long *field_len; if (!(row = mysql_fetch_row(result))) { RETURN_NULL(); @@ -1130,7 +1086,7 @@ void php_mysqli_fetch_into_hash_aux(zval *return_value, MYSQL_RES * result, zend } } #else - mysqlnd_fetch_into(result, ((fetchtype & MYSQLI_NUM)? MYSQLND_FETCH_NUM:0) | ((fetchtype & MYSQLI_ASSOC)? MYSQLND_FETCH_ASSOC:0), return_value, MYSQLND_MYSQLI); + mysqlnd_fetch_into(result, ((fetchtype & MYSQLI_NUM)? MYSQLND_FETCH_NUM:0) | ((fetchtype & MYSQLI_ASSOC)? MYSQLND_FETCH_ASSOC:0), return_value); #endif } /* }}} */ |