29#define ERROR_ARG_POS(arg_num) (hasThis() ? (arg_num-1) : (arg_num))
31#define SAFE_STR(a) ((a)?a:"")
40 if(mysql_err && *mysql_err) {
56 size_t hostname_len = 0, username_len = 0, passwd_len = 0, dbname_len = 0, socket_len = 0;
59 bool port_is_null = 1;
61 bool new_connection =
false;
64 bool self_alloced = 0;
67#if !defined(MYSQL_USE_MYSQLND)
70 "Headers and client library minor version mismatch. Headers:%d Library:%ld",
79 hostname = username = dbname = passwd = socket =
NULL;
81 if (!is_real_connect) {
83 &passwd, &passwd_len, &dbname, &dbname_len, &port, &port_is_null, &socket, &socket_len) ==
FAILURE) {
90 if (mysqli_resource && mysqli_resource->
ptr) {
102 &hostname, &
hostname_len, &username, &username_len, &passwd, &passwd_len, &dbname, &dbname_len, &port, &port_is_null, &socket, &socket_len, &
flags) ==
FAILURE) {
115 if (!socket_len || !socket) {
118 if (port_is_null || !port) {
132 if (mysql->
mysql && mysqli_resource &&
153 if ((le = zend_hash_find_ptr(&
EG(persistent_list), hash_key)) !=
NULL) {
170#ifndef MYSQLI_NO_CHANGE_USER_ON_PCONNECT
183 if (mysql->
mysql->data->vio->data->ssl) {
187 ssl_key = mysql->
mysql->data->vio->data->options.ssl_key ?
estrdup(mysql->
mysql->data->vio->data->options.ssl_key) :
NULL;
188 ssl_cert = mysql->
mysql->data->vio->data->options.ssl_cert ?
estrdup(mysql->
mysql->data->vio->data->options.ssl_cert) :
NULL;
189 ssl_ca = mysql->
mysql->data->vio->data->options.ssl_ca ?
estrdup(mysql->
mysql->data->vio->data->options.ssl_ca) :
NULL;
190 ssl_capath = mysql->
mysql->data->vio->data->options.ssl_capath ?
estrdup(mysql->
mysql->data->vio->data->options.ssl_capath) :
NULL;
191 ssl_cipher = mysql->
mysql->data->vio->data->options.ssl_cipher ?
estrdup(mysql->
mysql->data->vio->data->options.ssl_cipher) :
NULL;
224 new_connection =
true;
258 if (!is_real_connect) {
277 if (!mysqli_resource) {
279 mysqli_resource->
ptr = (
void *)mysql;
284 if (
persistent && (new_connection || is_real_connect)) {
307 if (!is_real_connect && self_alloced) {
396 zval_ptr_dtor_nogc(&row_array);
401 zval_ptr_dtor_nogc(&row_array);
429 zval_ptr_dtor_nogc(&row);
501 if (stmt->
stmt && stmt->
stmt->data && stmt->
stmt->data->error_info) {
545 mysql->
mysql->data->error_info->error_list.head =
NULL;
546 mysql->
mysql->data->error_info->error_list.tail =
NULL;
547 mysql->
mysql->data->error_info->error_list.count = 0;
552 *mysql->
mysql->data->error_info = error_info;
676 zval *elem, *dest_elem;
713static void mysqlnd_dont_poll_zval_array_from_mysqlnd_array(
MYSQLND **
in_array,
zval *in_zval_array,
zval *out_array)
716 zval proxy, *elem, *dest_elem;
743 zval *r_array, *e_array, *dont_poll_array;
761 if (!r_array && !e_array) {
766 if (r_array !=
NULL) {
767 if (mysqlnd_zval_array_to_mysqlnd_array(r_array, &new_r_array) ==
FAILURE) {
772 if (e_array !=
NULL) {
773 if (mysqlnd_zval_array_to_mysqlnd_array(e_array, &new_e_array) ==
FAILURE) {
780 ret =
mysqlnd_poll(new_r_array, new_e_array, &new_dont_poll_array, sec, usec, &desc_num);
782 mysqlnd_dont_poll_zval_array_from_mysqlnd_array(r_array !=
NULL ? new_dont_poll_array:
NULL, r_array, dont_poll_array);
784 if (r_array !=
NULL) {
785 mysqlnd_zval_array_from_mysqlnd_array(new_r_array, r_array);
787 if (e_array !=
NULL) {
788 mysqlnd_zval_array_from_mysqlnd_array(new_e_array, e_array);
791 if (new_dont_poll_array) {
792 efree(new_dont_poll_array);
905 mysqli_resource->
ptr = mysqli_resource->
info = (
void *)w;
931 mysqli_resource->
ptr = mysqli_resource->
info = (
void *)w;
964 uint32_t minlength, maxlength, number,
state;
973 cs = mysql->
mysql->data->charset;
988 add_property_string(
return_value,
"collation",(collation) ? (
char *)collation :
"");
990 add_property_long(
return_value,
"min_length", minlength);
991 add_property_long(
return_value,
"max_length", maxlength);
994 add_property_string(
return_value,
"comment", (comment) ? (
char *)comment :
"");
1005 size_t name_len = 0;
1015 if (
name && !name_len) {
1039 if (name_len == 0) {
1063 if (name_len == 0) {
in_array(mixed $needle, array $haystack, bool $strict=false)
dir(string $directory, $context=null)
PHPAPI int php_check_open_basedir(const char *path)
PHPAPI ZEND_COLD void php_error_docref(const char *docref, int type, const char *format,...)
zend_class_entry * mysqli_result_class_entry
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
zend_class_entry * mysqli_stmt_class_entry
zend_class_entry * mysqli_link_class_entry
mysqli_fetch_object(mysqli_result $result, string $class="stdClass", array $constructor_args=[])
mysqli_get_connection_stats(mysqli $mysql)
mysqli_begin_transaction(mysqli $mysql, int $flags=0, ?string $name=null)
mysqli_stmt_error_list(mysqli_stmt $statement)
mysqli_get_client_stats()
mysqli_get_warnings(mysqli $mysql)
mysqli_release_savepoint(mysqli $mysql, string $name)
mysqli_query(mysqli $mysql, string $query, int $result_mode=MYSQLI_STORE_RESULT)
mysqli_fetch_column(mysqli_result $result, int $column=0)
mysqli_error_list(mysqli $mysql)
mysqli_stmt_get_warnings(mysqli_stmt $statement)
mysqli_poll(?array &$read, ?array &$error, array &$reject, int $seconds, int $microseconds=0)
mysqli_set_charset(mysqli $mysql, string $charset)
mysqli_fetch_assoc(mysqli_result $result)
mysqli_fetch_all(mysqli_result $result, int $mode=MYSQLI_NUM)
mysqli_savepoint(mysqli $mysql, string $name)
mysqli_reap_async_query(mysqli $mysql)
mysqli_multi_query(mysqli $mysql, string $query)
mysqli_connect(?string $hostname=null, ?string $username=null, #[\SensitiveParameter] ?string $password=null, ?string $database=null, ?int $port=null, ?string $socket=null)
mysqli_fetch_array(mysqli_result $result, int $mode=MYSQLI_BOTH)
mysqli_stmt_get_result(mysqli_stmt $statement)
mysqli_get_charset(mysqli $mysql)
void php_mysqli_init(INTERNAL_FUNCTION_PARAMETERS, bool is_method)
void php_mysqli_close(MY_MYSQL *mysql, int close_type, int resource_status)
void php_mysqli_throw_sql_exception(char *sqlstate, int errorno, char *format,...)
#define MYSQLI_CLOSE_DISCONNECTED
#define MYSQLI_CLOSE_IMPLICIT
#define mysqli_stmt_warning_count(s)
#define mysqli_async_query(c, q, l)
#define mysqli_server_status(c)
#define mysqli_change_user_silent(c, u, p, d, p_len)
#define mysqli_close(c, how)
#define mysqli_stmt_get_connection(s)
void mysqli_common_connect(INTERNAL_FUNCTION_PARAMETERS, bool is_real_connect, bool in_ctor)
#define ERROR_ARG_POS(arg_num)
#define MYSQLI_STORE_RESULT
#define MYSQLI_REPORT_MYSQL_ERROR(mysql)
#define MYSQLI_USE_RESULT
#define MYSQLI_REPORT_STMT_ERROR(stmt)
#define MYSQLI_STORE_RESULT_COPY_DATA
#define MYSQLI_DISABLE_MQ
#define MYSQLI_REPORT_INDEX
MYSQLI_WARNING * php_get_warnings(MYSQLND_CONN_DATA *mysql)
void php_mysqli_report_index(const char *query, unsigned int status)
#define mysqlnd_begin_transaction(conn, flags, name)
#define mysqlnd_init(flags, persistent)
#define mysqlnd_restart_psession(conn)
#define mysqlnd_connect(conn, host, user, pass, pass_len, db, db_len, port, socket, mysql_flags, client_api_flags)
#define mysqlnd_release_savepoint(conn, name)
#define mysqlnd_get_connection_stats(conn, values)
#define mysqlnd_savepoint(conn, name)
PHPAPI enum_func_status mysqlnd_poll(MYSQLND **r_array, MYSQLND **e_array, MYSQLND ***dont_poll, long sec, long usec, int *desc_num)
#define mysqlnd_get_client_stats(values)
#define mysqlnd_reap_async_query(conn)
#define mysqlnd_stmt_get_result(stmt)
@ MYSQL_OPT_LOAD_DATA_LOCAL_DIR
#define CLIENT_MULTI_RESULTS
#define CLIENT_MULTI_STATEMENTS
#define MYSQLND_CLIENT_NO_FLAG
enum func_status enum_func_status
#define TRANS_START_NO_OPT
#define mysql_use_result(r)
#define mysql_warning_count(r)
#define mysql_get_client_version()
#define mysql_sqlstate(r)
#define mysql_num_rows(r)
#define mysql_field_count(r)
#define mysql_store_result(r)
#define mysql_ssl_set(c, key, cert, ca, capath, cipher)
#define mysql_real_query(r, a, b)
#define mysql_options(c, a, v)
#define mysql_set_character_set(r, a)
#define mysql_num_fields(r)
struct st_mysqlnd_error_list_element MYSQLND_ERROR_LIST_ELEMENT
struct st_mysqlnd_connection MYSQLND
struct st_mysqlnd_charset MYSQLND_CHARSET
struct st_mysqlnd_error_info MYSQLND_ERROR_INFO
unsigned const char * end
unsigned const char * pos
struct st_mysqli_warning MYSQLI_WARNING
#define MYSQLI_RETVAL_RESOURCE(__ptr, __ce)
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
struct _mysqli_object mysqli_object
#define MYSQLI_FETCH_RESOURCE_STMT(__ptr, __id, __check)
char * local_infile_directory
@ MYSQLI_STATUS_INITIALIZED
enum mysqli_status status
int async_result_fetch_type
zend_ptr_stack free_links
char sqlstate[MYSQLND_SQLSTATE_LENGTH+1]
ZEND_API ZEND_COLD void zend_throw_error(zend_class_entry *exception_ce, const char *format,...)
ZEND_API ZEND_COLD void zend_value_error(const char *format,...)
#define INTERNAL_FUNCTION_PARAMETERS
#define INTERNAL_FUNCTION_PARAM_PASSTHRU
ZEND_API const char * zend_zval_value_name(const zval *arg)
ZEND_API void add_assoc_string_ex(zval *arg, const char *key, size_t key_len, const char *str)
ZEND_API zend_result zend_parse_parameters(uint32_t num_args, const char *type_spec,...)
ZEND_API ZEND_COLD void zend_argument_must_not_be_empty_error(uint32_t arg_num)
ZEND_API void add_assoc_long_ex(zval *arg, const char *key, size_t key_len, zend_long n)
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 ZEND_COLD void zend_argument_type_error(uint32_t arg_num, const char *format,...)
ZEND_API void object_init(zval *arg)
#define array_init_size(arg, size)
#define zend_parse_parameters_none()
#define RETURN_EMPTY_ARRAY()
#define ecalloc(nmemb, size)
zend_string_release_ex(func->internal_function.function_name, 0)
#define strncasecmp(s1, s2, n)
ZEND_API zval *ZEND_FASTCALL zend_hash_next_index_insert(HashTable *ht, zval *pData)
ZEND_API zval *ZEND_FASTCALL zend_hash_index_find(const HashTable *ht, zend_ulong h)
#define ZEND_HASH_FOREACH_END()
#define ZEND_HASH_FOREACH_VAL(ht, _val)
ZEND_API zend_resource * zend_register_persistent_resource(const char *key, size_t key_len, void *rsrc_pointer, int rsrc_type)
ZEND_API void zend_llist_clean(zend_llist *l)
ZEND_API void * zend_llist_get_next_ex(zend_llist *l, zend_llist_position *pos)
ZEND_API void * zend_llist_get_first_ex(zend_llist *l, zend_llist_position *pos)
zend_llist_element * zend_llist_position
struct _zend_string zend_string
ZEND_API int zend_ptr_stack_num_elements(zend_ptr_stack *stack)
ZEND_API void zend_ptr_stack_init_ex(zend_ptr_stack *stack, bool persistent)
#define Z_ARRVAL_P(zval_p)
struct _zend_resource zend_resource
#define Z_OBJCE_P(zval_p)
ZEND_RESULT_CODE zend_result
#define ZVAL_COPY_VALUE(z, v)
ZEND_API void zval_ptr_dtor(zval *zval_ptr)
ZEND_API void zval_add_ref(zval *p)