41#define MYSQLI_ADD_PROPERTIES(a, b) \
44 while (b[i].pname != NULL) { \
45 mysqli_add_property((a), (b)[i].pname, (b)[i].pname_length, \
46 (mysqli_read_t)(b)[i].r_func, (mysqli_write_t)(b)[i].w_func); \
51#define ERROR_ARG_POS(arg_num) (hasThis() ? (arg_num-1) : (arg_num))
64static HashTable mysqli_warning_properties;
85static void free_prop_handler(
zval *el) {
148static void mysqli_objects_free_storage(
zend_object *
object)
163static void mysqli_link_free_storage(
zend_object *
object)
168 if (my_res && my_res->ptr) {
177 mysqli_objects_free_storage(
object);
182static void mysqli_driver_free_storage(
zend_object *
object)
184 mysqli_objects_free_storage(
object);
189static void mysqli_stmt_free_storage(
zend_object *
object)
194 if (my_res && my_res->ptr) {
198 mysqli_objects_free_storage(
object);
203static void mysqli_result_free_storage(
zend_object *
object)
208 if (my_res && my_res->ptr) {
211 mysqli_objects_free_storage(
object);
216static void mysqli_warning_free_storage(
zend_object *
object)
221 if (my_res && my_res->ptr) {
225 mysqli_objects_free_storage(
object);
250 return &
EG(uninitialized_zval);
269 return &
EG(error_zval);
279 return &
EG(error_zval);
298 p.read_func = (r_func) ? r_func : mysqli_read_na;
299 p.write_func = w_func;
309 bool has_property =
false;
312 switch (has_set_exists) {
319 if (
value != &
EG(uninitialized_zval)) {
328 if (
value != &
EG(uninitialized_zval)) {
356 if (
value != &
EG(uninitialized_zval)) {
372 intern = zend_object_alloc(
sizeof(
mysqli_object), class_type);
374 mysqli_base_class = class_type;
377 mysqli_base_class = mysqli_base_class->
parent;
379 intern->
prop_handler = zend_hash_find_ptr(&classes, mysqli_base_class->
name);
386 handlers = &mysqli_object_link_handlers;
388 handlers = &mysqli_object_driver_handlers;
390 handlers = &mysqli_object_stmt_handlers;
392 handlers = &mysqli_object_result_handlers;
394 handlers = &mysqli_object_warning_handlers;
425 mysqli_convert_zv_to_mysqlnd
438#ifdef PHP_MYSQL_UNIX_SOCK_ADDR
451#if defined(COMPILE_DL_MYSQLI) && defined(ZTS)
454 mysqli_globals->num_links = 0;
455 mysqli_globals->max_links = -1;
456 mysqli_globals->num_active_persistent = 0;
457 mysqli_globals->num_inactive_persistent = 0;
458 mysqli_globals->max_persistent = -1;
459 mysqli_globals->allow_persistent = 1;
460 mysqli_globals->default_port = 0;
461 mysqli_globals->default_host =
NULL;
462 mysqli_globals->default_user =
NULL;
463 mysqli_globals->default_pw =
NULL;
464 mysqli_globals->default_socket =
NULL;
466 mysqli_globals->allow_local_infile = 0;
467 mysqli_globals->local_infile_directory =
NULL;
468 mysqli_globals->rollback_on_cached_plink =
false;
479 mysqli_object_handlers.free_obj = mysqli_objects_free_storage;
480 mysqli_object_handlers.clone_obj =
NULL;
483 mysqli_object_handlers.has_property = mysqli_object_has_property;
486 mysqli_object_driver_handlers.free_obj = mysqli_driver_free_storage;
488 mysqli_object_link_handlers.free_obj = mysqli_link_free_storage;
490 mysqli_object_result_handlers.free_obj = mysqli_result_free_storage;
492 mysqli_object_stmt_handlers.free_obj = mysqli_stmt_free_storage;
494 mysqli_object_warning_handlers.free_obj = mysqli_warning_free_storage;
500 "MySqli persistent connection", module_number);
535 register_mysqli_symbols(module_number);
632#ifdef COMPILE_DL_MYSQLI
646 char *statement =
NULL;
647 size_t statement_len;
662 mysqli_resource->
ptr = (
void *)stmt;
735 unsigned error_no = conn->m->get_error_no(conn);
738 conn->m->get_sqlstate(conn),
error_no, conn->m->get_error_str(conn));
767 if (override_flags) {
771 fetchtype = override_flags;
781 if (fetchtype < MYSQLI_ASSOC || fetchtype >
MYSQLI_BOTH) {
800 zend_array_release(prop_table);
806 }
else if (ctor_params && zend_hash_num_elements(ctor_params) > 0) {
808 "must be empty when the specified class (%s) does not have a constructor",
zend_ffi_ctype_name_buf buf
PHPAPI ZEND_COLD void php_error_docref(const char *docref, int type, const char *format,...)
zend_result(* mysqli_write_t)(mysqli_object *obj, zval *newval)
struct _mysqli_prop_handler mysqli_prop_handler
zend_class_entry * mysqli_result_class_entry
HashTable * mysqli_object_get_debug_info(zend_object *object, int *is_temp)
void php_mysqli_fetch_into_hash_aux(zval *return_value, MYSQL_RES *result, zend_long fetchtype)
void php_mysqli_fetch_into_hash(INTERNAL_FUNCTION_PARAMETERS, int override_flags, int into_object)
zend_class_entry * mysqli_warning_class_entry
zval * mysqli_read_property(zend_object *object, zend_string *name, int type, void **cache_slot, zval *rv)
zend_class_entry * mysqli_driver_class_entry
void php_clear_stmt_bind(MY_STMT *stmt)
#define ERROR_ARG_POS(arg_num)
zend_class_entry * mysqli_exception_class_entry
zend_class_entry * mysqli_stmt_class_entry
zend_module_entry mysqli_module_entry
zval * mysqli_write_property(zend_object *object, zend_string *name, zval *value, void **cache_slot)
zend_result(* mysqli_read_t)(mysqli_object *obj, zval *rv, bool quiet)
void php_mysqli_dtor_p_elements(void *data)
void php_clear_mysql(MY_MYSQL *mysql)
#define MYSQLI_ADD_PROPERTIES(a, b)
zend_class_entry * mysqli_link_class_entry
void mysqli_add_property(HashTable *h, const char *pname, size_t pname_len, mysqli_read_t r_func, mysqli_write_t w_func)
void php_mysqli_close(MY_MYSQL *mysql, int close_type, int resource_status)
const mysqli_property_entry mysqli_driver_property_entries[]
#define MYSQLI_CLOSE_IMPLICIT
#define mysqli_stmt_close(c, implicit)
#define MYSQLI_CLOSE_EXPLICIT
#define mysqli_server_status(c)
#define mysqli_close(c, how)
#define MYSQLI_STORE_RESULT
const mysqli_property_entry mysqli_stmt_property_entries[]
#define MYSQLI_REPORT_MYSQL_ERROR(mysql)
#define MYSQLI_USE_RESULT
#define PHP_MYSQLI_EXPORT(__type)
#define MYSQLI_REPORT_ERROR
#define MYSQLI_REPORT_STMT_ERROR(stmt)
void php_clear_warnings(MYSQLI_WARNING *w)
void php_mysqli_report_error(const char *sqlstate, int errorno, const char *error)
#define MYSQLI_REPORT_INDEX
const mysqli_property_entry mysqli_result_property_entries[]
const mysqli_property_entry mysqli_warning_property_entries[]
#define MYSQLI_REPORT_STRICT
void php_mysqli_report_index(const char *query, unsigned int status)
const mysqli_property_entry mysqli_link_property_entries[]
zend_object_iterator * php_mysqli_result_get_iterator(zend_class_entry *ce, zval *object, int by_ref)
#define mysqlnd_fetch_into(result, flags, ret_val)
#define mysql_use_result(r)
#define mysql_free_result(r)
#define mysql_store_result(r)
#define mysql_stmt_prepare(s, q, l)
#define mysql_get_client_info()
#define mysql_stmt_init(r)
PHPAPI void mysqlnd_reverse_api_register_api(const MYSQLND_REVERSE_API *apiext)
struct st_mysqlnd_reverse_api MYSQLND_REVERSE_API
struct st_mysqlnd_connection_data MYSQLND_CONN_DATA
struct st_mysqlnd_connection MYSQLND
php_info_print_table_start()
php_info_print_table_row(2, "PDO Driver for Firebird", "enabled")
php_info_print_table_end()
#define PHP_MSHUTDOWN_FUNCTION
#define PHP_MINIT_FUNCTION
#define PHP_MINFO_FUNCTION
#define PHP_GINIT_FUNCTION
#define PHP_RINIT_FUNCTION
#define PHP_RSHUTDOWN_FUNCTION
#define PHP_MODULE_GLOBALS
#define STD_PHP_INI_ENTRY_EX
#define STD_PHP_INI_ENTRY
#define STD_PHP_INI_BOOLEAN
#define PHP_MYSQLI_VERSION
struct st_mysqli_warning MYSQLI_WARNING
zend_long num_active_persistent
#define MYSQLI_FETCH_RESOURCE_CONN(__ptr, __id, __check)
#define MYSQLI_FETCH_RESOURCE(__ptr, __type, __id, __name, __check)
zend_long num_inactive_persistent
#define MYSQLI_REGISTER_RESOURCE_EX(__ptr, __zval)
struct _mysqli_object mysqli_object
char * local_infile_directory
bool rollback_on_cached_plink
@ MYSQLI_STATUS_INITIALIZED
PHPAPI zend_class_entry * spl_ce_RuntimeException
enum mysqli_status status
mysqli_write_t write_func
int default_properties_count
zend_function * constructor
zend_class_entry * parent
const zend_object_handlers * handlers
zend_ptr_stack free_links
ZEND_API ZEND_COLD void zend_throw_error(zend_class_entry *exception_ce, const char *format,...)
ZEND_API zend_class_entry * zend_standard_class_def
#define ZEND_TSRMLS_CACHE_UPDATE()
#define INTERNAL_FUNCTION_PARAMETERS
#define ZEND_TSRMLS_CACHE_DEFINE()
ZEND_API zend_result object_init_ex(zval *arg, zend_class_entry *class_type)
ZEND_API zend_result zend_parse_parameters(uint32_t num_args, const char *type_spec,...)
ZEND_API void object_properties_init(zend_object *object, zend_class_entry *class_type)
ZEND_API zend_result zend_parse_method_parameters(uint32_t num_args, zval *this_ptr, const char *type_spec,...)
ZEND_API ZEND_COLD void zend_argument_value_error(uint32_t arg_num, const char *format,...)
ZEND_API void zend_merge_properties(zval *obj, HashTable *properties)
#define ZEND_DECLARE_MODULE_GLOBALS(module_name)
#define ZEND_GET_MODULE(name)
#define zend_parse_parameters_none()
ZEND_API void zend_call_known_function(zend_function *fn, zend_object *object, zend_class_entry *called_scope, zval *retval_ptr, uint32_t param_count, zval *params, HashTable *named_params)
#define ecalloc(nmemb, size)
#define pefree(ptr, persistent)
zend_string_release_ex(func->internal_function.function_name, 0)
#define ZEND_ACC_IMPLICIT_ABSTRACT_CLASS
#define ZEND_ACC_EXPLICIT_ABSTRACT_CLASS
#define ZEND_ACC_INTERFACE
struct _zend_property_info zend_property_info
#define ZEND_CALL_USES_STRICT_TYPES(call)
#define ZEND_INTERNAL_CLASS
ZEND_API bool zend_never_inline zend_verify_property_type(const zend_property_info *info, zval *property, bool strict)
ZEND_API void ZEND_FASTCALL zend_hash_destroy(HashTable *ht)
ZEND_API HashTable *ZEND_FASTCALL zend_symtable_to_proptable(HashTable *ht)
ZEND_API zval *ZEND_FASTCALL zend_hash_add(HashTable *ht, zend_string *key, zval *pData)
#define zend_hash_init(ht, nSize, pHashFunction, pDestructor, persistent)
#define ZEND_HASH_MAP_FOREACH_PTR(ht, _ptr)
#define zend_new_array(size)
#define ZEND_HASH_FOREACH_END()
#define UNREGISTER_INI_ENTRIES()
#define REGISTER_INI_ENTRIES()
#define DISPLAY_INI_ENTRIES()
ZEND_API zend_class_entry * zend_ce_aggregate
ZEND_API zend_result zend_create_internal_iterator_zval(zval *return_value, zval *obj)
ZEND_API int zend_register_list_destructors_ex(rsrc_dtor_func_t ld, rsrc_dtor_func_t pld, const char *type_name, int module_number)
#define ZEND_RSRC_DTOR_FUNC(name)
struct _zend_string zend_string
struct _zend_module_dep zend_module_dep
struct _zend_module_entry zend_module_entry
#define ZEND_MOD_REQUIRED(name)
#define STANDARD_MODULE_PROPERTIES_EX
#define STANDARD_MODULE_HEADER_EX
ZEND_API int zend_std_has_property(zend_object *zobj, zend_string *name, int has_set_exists, void **cache_slot)
ZEND_API const zend_object_handlers std_object_handlers
ZEND_API zval * zend_std_write_property(zend_object *zobj, zend_string *name, zval *value, void **cache_slot)
ZEND_API zend_property_info * zend_get_property_info(const zend_class_entry *ce, zend_string *member, int silent)
ZEND_API zval * zend_std_read_property(zend_object *zobj, zend_string *name, int type, void **cache_slot, zval *rv)
#define ZEND_PROPERTY_ISSET
#define ZEND_PROPERTY_NOT_EMPTY
#define ZEND_PROPERTY_EXISTS
ZEND_API void ZEND_FASTCALL zend_object_std_init(zend_object *object, zend_class_entry *ce)
ZEND_API void zend_object_std_dtor(zend_object *object)
ZEND_API void ZEND_FASTCALL convert_to_boolean(zval *op)
#define XtOffsetOf(s_type, field)
#define EMPTY_SWITCH_DEFAULT_CASE()
#define UNEXPECTED(condition)
struct _zend_class_entry zend_class_entry
struct _zend_object zend_object
ZEND_API void zend_ptr_stack_clean(zend_ptr_stack *stack, void(*func)(void *), bool free_elements)
ZEND_API void zend_ptr_stack_destroy(zend_ptr_stack *stack)
ZEND_API zend_string_init_interned_func_t zend_string_init_interned
struct _zend_array HashTable
#define Z_OBJCE_P(zval_p)
#define ZEND_TYPE_IS_SET(t)
ZEND_RESULT_CODE zend_result
struct _zend_object_handlers zend_object_handlers
#define ZVAL_COPY_VALUE(z, v)
ZEND_API void zval_ptr_dtor(zval *zval_ptr)