22#define PHP_MYSQLND_VERSION "mysqlnd " PHP_VERSION
23#define MYSQLND_VERSION_ID PHP_VERSION_ID
25#define MYSQLND_PLUGIN_API_VERSION 2
38#if defined(A0) && PHP_DEBUG
39#define MYSQLND_DO_WIRE_CHECK_BEFORE_COMMAND 1
43#define MYSQLND_DBG_ENABLED 1
45#define MYSQLND_DBG_ENABLED 0
48#define MYSQLND_CHARSETS_SANITY_CHECK 0
58#define MYSQLND_STR_W_LEN(str) str, (sizeof(str) - 1)
71#define mysqlnd_restart_psession(conn) ((conn)->data)->m->restart_psession((conn)->data)
72#define mysqlnd_end_psession(conn) ((conn)->data)->m->end_psession((conn)->data)
74#define mysqlnd_thread_safe() true
81#define mysqlnd_init(flags, persistent) mysqlnd_connection_init((flags), (persistent), NULL )
82#define mysqlnd_connect(conn, host, user, pass, pass_len, db, db_len, port, socket, mysql_flags, client_api_flags) \
83 mysqlnd_connection_connect((conn), (host), (user), (pass), (pass_len), (db), (db_len), (port), (socket), (mysql_flags), (client_api_flags))
87 const char *
const host,
88 const char *
const user,
89 const char *
const passwd,
unsigned int passwd_len,
90 const char *
const db,
unsigned int db_len,
92 const char *
const socket_or_pipe,
93 unsigned int mysql_flags,
94 unsigned int client_api_flags
97#define mysqlnd_change_user(conn, user, passwd, db, silent) ((conn)->data)->m->change_user((conn)->data, (user), (passwd), (db), (silent), strlen((passwd)))
98#define mysqlnd_change_user_ex(conn, user, passwd, db, silent, passwd_len) ((conn)->data)->m->change_user((conn)->data, (user), (passwd), (db), (silent), (passwd_len))
103#define mysqlnd_fetch_into(result, flags, ret_val) (result)->m.fetch_into((result), (flags), (ret_val) ZEND_FILE_LINE_CC)
104#define mysqlnd_fetch_row_c(result) (result)->m.fetch_row_c((result))
105#define mysqlnd_fetch_row_zval(result, row_ptr, fetched) \
106 (result)->m.fetch_row((result), (row_ptr), 0, (fetched))
107#define mysqlnd_get_connection_stats(conn, values) ((conn)->data)->m->get_statistics((conn)->data, (values) ZEND_FILE_LINE_CC)
108#define mysqlnd_get_client_stats(values) _mysqlnd_get_client_stats(mysqlnd_global_stats, (values) ZEND_FILE_LINE_CC)
110#define mysqlnd_close(conn,is_forced) (conn)->m->close((conn), (is_forced))
111#define mysqlnd_query(conn, query_str, query_len) ((conn)->data)->m->query((conn)->data, (query_str), (query_len))
112#define mysqlnd_async_query(conn, query_str, query_len) ((conn)->data)->m->send_query((conn)->data, (query_str), (query_len), NULL, NULL)
113#define mysqlnd_reap_async_query(conn) ((conn)->data)->m->reap_query((conn)->data)
117#define mysqlnd_use_result(conn) ((conn)->data)->m->use_result((conn)->data)
118#define mysqlnd_store_result(conn) ((conn)->data)->m->store_result((conn)->data)
119#define mysqlnd_next_result(conn) ((conn)->data)->m->next_result((conn)->data)
120#define mysqlnd_more_results(conn) ((conn)->data)->m->more_results((conn)->data)
121#define mysqlnd_free_result(r,e_or_i) ((MYSQLND_RES*)r)->m.free_result(((MYSQLND_RES*)(r)), (e_or_i))
122#define mysqlnd_data_seek(result, row) (result)->m.seek_data((result), (row))
125#define mysqlnd_errno(conn) ((conn)->data)->m->get_error_no((conn)->data)
126#define mysqlnd_error(conn) ((conn)->data)->m->get_error_str((conn)->data)
127#define mysqlnd_sqlstate(conn) ((conn)->data)->m->get_sqlstate((conn)->data)
130#define mysqlnd_character_set_name(conn) ((conn)->data)->m->charset_name((conn)->data)
133#define mysqlnd_field_count(conn) ((conn)->data)->m->get_field_count((conn)->data)
134#define mysqlnd_insert_id(conn) ((conn)->data)->m->get_last_insert_id((conn)->data)
135#define mysqlnd_affected_rows(conn) ((conn)->data)->m->get_affected_rows((conn)->data)
136#define mysqlnd_warning_count(conn) ((conn)->data)->m->get_warning_count((conn)->data)
137#define mysqlnd_info(conn) ((conn)->data)->m->get_last_message((conn)->data)
138#define mysqlnd_get_server_info(conn) ((conn)->data)->m->get_server_information((conn)->data)
139#define mysqlnd_get_server_version(conn) ((conn)->data)->m->get_server_version((conn)->data)
140#define mysqlnd_get_host_info(conn) ((conn)->data)->m->get_host_information((conn)->data)
141#define mysqlnd_get_proto_info(conn) ((conn)->data)->m->get_protocol_information((conn)->data)
142#define mysqlnd_thread_id(conn) ((conn)->data)->m->get_thread_id((conn)->data)
143#define mysqlnd_get_server_status(conn) ((conn)->data)->m->get_server_status((conn)->data)
145#define mysqlnd_num_rows(result) (result)->m.num_rows((result))
146#define mysqlnd_num_fields(result) (result)->m.num_fields((result))
148#define mysqlnd_fetch_lengths(result) (result)->m.fetch_lengths((result))
150#define mysqlnd_field_seek(result, ofs) (result)->m.seek_field((result), (ofs))
151#define mysqlnd_field_tell(result) (result)->m.field_tell((result))
152#define mysqlnd_fetch_field(result) (result)->m.fetch_field((result))
153#define mysqlnd_fetch_field_direct(result,fnr) (result)->m.fetch_field_direct((result), (fnr))
154#define mysqlnd_fetch_fields(result) (result)->m.fetch_fields((result))
160#define mysqlnd_ssl_set(conn, key, cert, ca, capath, cipher) ((conn)->data)->m->ssl_set((conn)->data, (key), (cert), (ca), (capath), (cipher))
163#define mysqlnd_stmt_insert_id(stmt) (stmt)->m->get_last_insert_id((stmt))
164#define mysqlnd_stmt_affected_rows(stmt) (stmt)->m->get_affected_rows((stmt))
165#define mysqlnd_stmt_num_rows(stmt) (stmt)->m->get_num_rows((stmt))
166#define mysqlnd_stmt_param_count(stmt) (stmt)->m->get_param_count((stmt))
167#define mysqlnd_stmt_field_count(stmt) (stmt)->m->get_field_count((stmt))
168#define mysqlnd_stmt_warning_count(stmt) (stmt)->m->get_warning_count((stmt))
169#define mysqlnd_stmt_server_status(stmt) (stmt)->m->get_server_status((stmt))
170#define mysqlnd_stmt_errno(stmt) (stmt)->m->get_error_no((stmt))
171#define mysqlnd_stmt_error(stmt) (stmt)->m->get_error_str((stmt))
172#define mysqlnd_stmt_sqlstate(stmt) (stmt)->m->get_sqlstate((stmt))
185#define mysqlnd_autocommit(conn, mode) ((conn)->data)->m->set_autocommit((conn)->data, (mode))
186#define mysqlnd_begin_transaction(conn,flags,name) ((conn)->data)->m->tx_begin((conn)->data, (flags), (name))
187#define mysqlnd_commit(conn, flags, name) ((conn)->data)->m->tx_commit_or_rollback((conn)->data, true, (flags), (name))
188#define mysqlnd_rollback(conn, flags, name) ((conn)->data)->m->tx_commit_or_rollback((conn)->data, false, (flags), (name))
189#define mysqlnd_savepoint(conn, name) ((conn)->data)->m->tx_savepoint((conn)->data, (name))
190#define mysqlnd_release_savepoint(conn, name) ((conn)->data)->m->tx_savepoint_release((conn)->data, (name))
191#define mysqlnd_list_dbs(conn, wild) ((conn)->data)->m->list_method((conn)->data, wild? "SHOW DATABASES LIKE %s":"SHOW DATABASES", (wild), NULL)
192#define mysqlnd_list_processes(conn) ((conn)->data)->m->list_method((conn)->data, "SHOW PROCESSLIST", NULL, NULL)
193#define mysqlnd_list_tables(conn, wild) ((conn)->data)->m->list_method((conn)->data, wild? "SHOW TABLES LIKE %s":"SHOW TABLES", (wild), NULL)
194#define mysqlnd_dump_debug_info(conn) ((conn)->data)->m->server_dump_debug_information((conn)->data)
195#define mysqlnd_select_db(conn, db, db_len) ((conn)->data)->m->select_db((conn)->data, (db), (db_len))
196#define mysqlnd_ping(conn) ((conn)->data)->m->ping((conn)->data)
197#define mysqlnd_kill(conn, pid) ((conn)->data)->m->kill_connection((conn)->data, (pid))
198#define mysqlnd_refresh(conn, options) ((conn)->data)->m->refresh_server((conn)->data, (options))
199#define mysqlnd_set_character_set(conn, cs) ((conn)->data)->m->set_charset((conn)->data, (cs))
200#define mysqlnd_stat(conn, msg) ((conn)->data)->m->get_server_statistics(((conn)->data), (msg))
201#define mysqlnd_options(conn, opt, value) ((conn)->data)->m->set_client_option((conn)->data, (opt), (value))
202#define mysqlnd_options4(conn, opt, k, v) ((conn)->data)->m->set_client_option_2d((conn)->data, (opt), (k), (v))
203#define mysqlnd_set_server_option(conn, op) ((conn)->data)->m->set_server_option((conn)->data, (op))
206#define mysqlnd_real_escape_string(conn, newstr, escapestr, escapestr_len) \
207 ((conn)->data)->m->escape_string((conn)->data, (newstr), (escapestr), (escapestr_len))
208#define mysqlnd_escape_string(newstr, escapestr, escapestr_len) \
209 mysqlnd_old_escape_string((newstr), (escapestr), (escapestr_len))
215#define mysqlnd_stmt_init(conn) ((conn)->data)->m->stmt_init(((conn)->data))
216#define mysqlnd_stmt_store_result(stmt) (!mysqlnd_stmt_field_count((stmt)) ? PASS:((stmt)->m->store_result((stmt))? PASS:FAIL))
217#define mysqlnd_stmt_get_result(stmt) (stmt)->m->get_result((stmt))
218#define mysqlnd_stmt_more_results(stmt) (stmt)->m->more_results((stmt))
219#define mysqlnd_stmt_next_result(stmt) (stmt)->m->next_result((stmt))
220#define mysqlnd_stmt_data_seek(stmt, row) (stmt)->m->seek_data((stmt), (row))
221#define mysqlnd_stmt_prepare(stmt, q, qlen) (stmt)->m->prepare((stmt), (q), (qlen))
222#define mysqlnd_stmt_execute(stmt) (stmt)->m->execute((stmt))
223#define mysqlnd_stmt_send_long_data(stmt,p,d,l) (stmt)->m->send_long_data((stmt), (p), (d), (l))
224#define mysqlnd_stmt_alloc_param_bind(stmt) (stmt)->m->alloc_parameter_bind((stmt))
225#define mysqlnd_stmt_free_param_bind(stmt,bind) (stmt)->m->free_parameter_bind((stmt), (bind))
226#define mysqlnd_stmt_bind_param(stmt,bind) (stmt)->m->bind_parameters((stmt), (bind))
227#define mysqlnd_stmt_bind_one_param(stmt,n,z,t) (stmt)->m->bind_one_parameter((stmt), (n), (z), (t))
228#define mysqlnd_stmt_refresh_bind_param(s) (s)->m->refresh_bind_param((s))
229#define mysqlnd_stmt_alloc_result_bind(stmt) (stmt)->m->alloc_result_bind((stmt))
230#define mysqlnd_stmt_free_result_bind(stmt,bind) (stmt)->m->free_result_bind((stmt), (bind))
231#define mysqlnd_stmt_bind_result(stmt,bind) (stmt)->m->bind_result((stmt), (bind))
232#define mysqlnd_stmt_bind_one_result(s,no) (s)->m->bind_one_result((s), (no))
233#define mysqlnd_stmt_result_metadata(stmt) (stmt)->m->get_result_metadata((stmt))
235#define mysqlnd_stmt_free_result(stmt) (stmt)->m->free_result((stmt))
236#define mysqlnd_stmt_close(stmt, implicit) (stmt)->m->dtor((stmt), (implicit))
237#define mysqlnd_stmt_reset(stmt) (stmt)->m->reset((stmt))
238#define mysqlnd_stmt_flush(stmt) (stmt)->m->flush((stmt))
241#define mysqlnd_stmt_attr_get(stmt, attr, value) (stmt)->m->get_attribute((stmt), (attr), (value))
242#define mysqlnd_stmt_attr_set(stmt, attr, value) (stmt)->m->set_attribute((stmt), (attr), (value))
244#define mysqlnd_stmt_fetch(stmt, fetched) (stmt)->m->fetch((stmt), (fetched))
253#ifndef MYSQLND_CORE_STATISTICS_DISABLED
255#define MYSQLND_INC_GLOBAL_STATISTIC(statistic) \
256 MYSQLND_INC_STATISTIC(MYSQLND_G(collect_statistics), mysqlnd_global_stats, (statistic))
258#define MYSQLND_DEC_GLOBAL_STATISTIC(statistic) \
259 MYSQLND_DEC_STATISTIC(MYSQLND_G(collect_statistics), mysqlnd_global_stats, (statistic))
261#define MYSQLND_INC_GLOBAL_STATISTIC_W_VALUE2(statistic1, value1, statistic2, value2) \
262 MYSQLND_INC_STATISTIC_W_VALUE2(MYSQLND_G(collect_statistics), mysqlnd_global_stats, (statistic1), (value1), (statistic2), (value2))
264#define MYSQLND_INC_CONN_STATISTIC(conn_stats, statistic) \
265 MYSQLND_INC_STATISTIC(MYSQLND_G(collect_statistics), mysqlnd_global_stats, (statistic)); \
266 MYSQLND_INC_STATISTIC(MYSQLND_G(collect_statistics), (conn_stats), (statistic));
268#define MYSQLND_INC_CONN_STATISTIC_W_VALUE(conn_stats, statistic, value) \
269 MYSQLND_INC_STATISTIC_W_VALUE(MYSQLND_G(collect_statistics), mysqlnd_global_stats, (statistic), (value)); \
270 MYSQLND_INC_STATISTIC_W_VALUE(MYSQLND_G(collect_statistics), (conn_stats), (statistic), (value));
272#define MYSQLND_INC_CONN_STATISTIC_W_VALUE2(conn_stats, statistic1, value1, statistic2, value2) \
273 MYSQLND_INC_STATISTIC_W_VALUE2(MYSQLND_G(collect_statistics), mysqlnd_global_stats, (statistic1), (value1), (statistic2), (value2)); \
274 MYSQLND_INC_STATISTIC_W_VALUE2(MYSQLND_G(collect_statistics), (conn_stats), (statistic1), (value1), (statistic2), (value2));
276#define MYSQLND_INC_CONN_STATISTIC_W_VALUE3(conn_stats, statistic1, value1, statistic2, value2, statistic3, value3) \
277 MYSQLND_INC_STATISTIC_W_VALUE3(MYSQLND_G(collect_statistics), mysqlnd_global_stats, (statistic1), (value1), (statistic2), (value2), (statistic3), (value3)); \
278 MYSQLND_INC_STATISTIC_W_VALUE3(MYSQLND_G(collect_statistics), (conn_stats), (statistic1), (value1), (statistic2), (value2), (statistic3), (value3));
282#define MYSQLND_INC_GLOBAL_STATISTIC(statistic)
283#define MYSQLND_DEC_GLOBAL_STATISTIC(statistic)
284#define MYSQLND_INC_GLOBAL_STATISTIC_W_VALUE2(statistic1, value1, statistic2, value2)
285#define MYSQLND_INC_CONN_STATISTIC(conn_stats, statistic)
286#define MYSQLND_INC_CONN_STATISTIC_W_VALUE(conn_stats, statistic, value)
287#define MYSQLND_INC_CONN_STATISTIC_W_VALUE2(conn_stats, statistic1, value1, statistic2, value2)
288#define MYSQLND_INC_CONN_STATISTIC_W_VALUE3(conn_stats, statistic1, value1, statistic2, value2, statistic3, value3)
294#define MYSQLND_METHOD(class, method) mysqlnd_##class##_##method##_pub
295#define MYSQLND_METHOD_PRIVATE(class, method) mysqlnd_##class##_##method##_priv
313#define MYSQLND_G(v) ZEND_MODULE_GLOBALS_ACCESSOR(mysqlnd, v)
315#if defined(ZTS) && defined(COMPILE_DL_MYSQLND)
PHPAPI MYSQLND * mysqlnd_connection_init(const size_t client_flags, const bool persistent, MYSQLND_CLASS_METHODS_TYPE(mysqlnd_object_factory) *object_factory)
PHPAPI MYSQLND_STATS * mysqlnd_global_stats
PHPAPI unsigned int mysqlnd_plugin_count(void)
PHPAPI unsigned int mysqlnd_plugin_register(void)
PHPAPI const char * mysqlnd_get_client_info(void)
PHPAPI const MYSQLND_STRING mysqlnd_stats_values_names[]
PHPAPI void mysqlnd_plugin_apply_with_argument(apply_func_arg_t apply_func, void *argument)
PHPAPI void mysqlnd_minfo_print_hash(zval *values)
PHPAPI void _mysqlnd_get_client_stats(MYSQLND_STATS *stats, zval *return_value ZEND_FILE_LINE_DC)
zend_long mempool_default_size
PHPAPI unsigned int mysqlnd_plugin_register_ex(struct st_mysqlnd_plugin_header *plugin)
PHPAPI void mysqlnd_efree_param_bind_dtor(MYSQLND_PARAM_BIND *param_bind)
PHPAPI void mysqlnd_library_init(void)
PHPAPI void * mysqlnd_plugin_find(const char *const name)
char * sha256_server_public_key
PHPAPI enum_func_status mysqlnd_poll(MYSQLND **r_array, MYSQLND **e_array, MYSQLND ***dont_poll, long sec, long usec, int *desc_num)
MYSQLND_DEBUG * trace_alloc
zend_long net_read_timeout
zend_long net_read_buffer_size
zend_long net_cmd_buffer_size
PHPAPI void mysqlnd_efree_result_bind_dtor(MYSQLND_RESULT_BIND *result_bind)
PHPAPI void mysqlnd_local_infile_default(MYSQLND_CONN_DATA *conn)
char * trace_alloc_settings
PHPAPI void mysqlnd_free_param_bind_dtor(MYSQLND_PARAM_BIND *param_bind)
PHPAPI void mysqlnd_debug(const char *mode)
bool collect_memory_statistics
PHPAPI const MYSQLND_CHARSET * mysqlnd_find_charset_nr(const unsigned int charsetno)
PHPAPI void mysqlnd_free_result_bind_dtor(MYSQLND_RESULT_BIND *result_bind)
PHPAPI unsigned long mysqlnd_get_client_version(void)
PHPAPI zend_ulong mysqlnd_old_escape_string(char *newstr, const char *escapestr, size_t escapestr_len)
PHPAPI const MYSQLND_CHARSET * mysqlnd_find_charset_name(const char *const charsetname)
PHPAPI void mysqlnd_library_end(void)
PHPAPI MYSQLND * mysqlnd_connection_connect(MYSQLND *conn, const char *const host, const char *const user, const char *const passwd, unsigned int passwd_len, const char *const db, unsigned int db_len, unsigned int port, const char *const socket_or_pipe, unsigned int mysql_flags, unsigned int client_api_flags)
enum func_status enum_func_status
struct st_mysqlnd_connection_data MYSQLND_CONN_DATA
struct st_mysqlnd_string MYSQLND_STRING
#define MYSQLND_CLASS_METHODS_TYPE(class)
struct st_mysqlnd_stats MYSQLND_STATS
struct st_mysqlnd_param_bind MYSQLND_PARAM_BIND
struct st_mysqlnd_connection MYSQLND
struct st_mysqlnd_debug MYSQLND_DEBUG
struct st_mysqlnd_charset MYSQLND_CHARSET
struct st_mysqlnd_result_bind MYSQLND_RESULT_BIND
#define ZEND_TSRMLS_CACHE_EXTERN()
#define ZEND_END_MODULE_GLOBALS(module_name)
#define ZEND_EXTERN_MODULE_GLOBALS(module_name)
#define ZEND_BEGIN_MODULE_GLOBALS(module_name)
int(* apply_func_arg_t)(zval *pDest, void *argument)
#define ZEND_FILE_LINE_DC