📄 mysqlnd.h
字号:
struct st_mysqlnd_result_metadata { MYSQLND_FIELD *fields; struct mysqlnd_field_hash_key *zend_hash_keys; unsigned int current_field; unsigned int field_count;};struct st_mysqlnd_buffered_result { zval ***data; zval ***data_cursor; zend_uchar **row_buffers; mynd_ulonglong row_count; zend_bool persistent; MYSQLND_QCACHE *qcache; unsigned int references;};struct st_mysqlnd_unbuffered_result { /* For unbuffered (both normal and PS) */ zval **last_row_data; zend_uchar *last_row_buffer; mynd_ulonglong row_count; zend_bool eof_reached;};struct st_mysqlnd_res { MYSQLND *conn; enum_mysqlnd_res_type type; unsigned int field_count; /* For metadata functions */ MYSQLND_RES_METADATA * meta; /* To be used with store_result() - both normal and PS */ MYSQLND_RES_BUFFERED * data; MYSQLND_RES_UNBUFFERED * unbuf; /* Column lengths of current row - both buffered and unbuffered. For buffered results it duplicates the data found in **data */ unsigned long *lengths; php_mysql_packet_row *row_packet; /* Unused for PS */ /* zval cache */ MYSQLND_ZVAL_PCACHE *zval_cache; struct st_mysqlnd_res_methods m;};#define MYSQLND_DEFAULT_PREFETCH_ROWS (ulong) 1struct st_mysqlnd_param_bind { zval *zv; zend_uchar type; enum_param_bind_flags flags;};struct st_mysqlnd_result_bind { zval *zv; zend_uchar original_type; zend_bool bound;};struct st_mysqlnd_stmt { MYSQLND *conn; unsigned long stmt_id; unsigned long flags;/* cursor is set here */ enum_mysqlnd_stmt_state state; unsigned int warning_count; MYSQLND_RES *result; unsigned int field_count; unsigned int param_count; unsigned char send_types_to_server; MYSQLND_PARAM_BIND *param_bind; MYSQLND_RESULT_BIND *result_bind; zend_bool result_zvals_separated_once; mysqlnd_upsert_status upsert_status; mysqlnd_error_info error_info; zend_bool update_max_length; unsigned long prefetch_rows; zend_bool cursor_exists; mysqlnd_stmt_use_or_store_func default_rset_handler; MYSQLND_CMD_BUFFER cmd_buffer; struct st_mysqlnd_stmt_methods *m;};/* Library related */PHPAPI void mysqlnd_library_init();PHPAPI void mysqlnd_library_end();PHPAPI void mysqlnd_restart_psession(MYSQLND *conn);PHPAPI void mysqlnd_end_psession(MYSQLND *conn);#define mysqlnd_thread_safe() TRUEconst MYSQLND_CHARSET * mysqlnd_find_charset_nr(uint charsetno);const MYSQLND_CHARSET * mysqlnd_find_charset_name(const char * const charsetname);/* Connect */PHPAPI MYSQLND * mysqlnd_init(zend_bool persistent);PHPAPI MYSQLND * mysqlnd_connect(MYSQLND *conn, char *host, char *user, char *passwd, unsigned int passwd_len, char *db, unsigned int db_len, unsigned int port, char *socket, unsigned int mysql_flags, MYSQLND_ZVAL_PCACHE *zval_cache TSRMLS_DC);#define mysqlnd_change_user(conn, user, passwd, db) (conn)->m->change_user((conn), (user), (passwd), (db) TSRMLS_CC)/* Query */#define mysqlnd_fetch_into(result, flags, return_value) (result)->m.fetch_into((result), (flags), (return_value) TSRMLS_CC ZEND_FILE_LINE_CC)#define mysqlnd_fetch_all(result, flags, return_value) (result)->m.fetch_all((result), (flags), (return_value) TSRMLS_CC ZEND_FILE_LINE_CC)#define mysqlnd_get_connection_stats(conn, values) (conn)->m->get_statistics((conn), (values) TSRMLS_CC ZEND_FILE_LINE_CC)#define mysqlnd_get_client_stats(values) _mysqlnd_get_client_stats((values) TSRMLS_CC ZEND_FILE_LINE_CC)#define mysqlnd_close(conn,is_forced) (conn)->m->close((conn), (is_forced) TSRMLS_CC)#define mysqlnd_query(conn, query_str, query_len) (conn)->m->query((conn), (query_str), (query_len) TSRMLS_CC)#define mysqlnd_unbuffered_skip_result(result) (result)->m.skip_result((result) TSRMLS_CC)#define mysqlnd_use_result(conn) (conn)->m->use_result((conn) TSRMLS_CC)#define mysqlnd_store_result(conn) (conn)->m->store_result((conn) TSRMLS_CC)#define mysqlnd_next_result(conn) (conn)->m->next_result((conn) TSRMLS_CC)#define mysqlnd_more_results(conn) (conn)->m->more_results((conn))#define mysqlnd_free_result(r,e_or_i) ((MYSQLND_RES*)r)->m.free_result(((MYSQLND_RES*)(r)), (e_or_i) TSRMLS_CC)#define mysqlnd_data_seek(result, row) (result)->m.seek_data((result), (row))/*****************************************************************************************************/#if defined(MYSQLND_USE_OPTIMISATIONS) && MYSQLND_USE_OPTIMISATIONS == 1/* Errors */#define mysqlnd_errno(conn) (conn)->error_info.error_no#define mysqlnd_error(conn) (conn)->error_info.error#define mysqlnd_sqlstate(conn) ((conn)->error_info.sqlstate[0] ? conn->error_info.sqlstate:MYSQLND_SQLSTATE_NULL)/* Simple metadata */#define mysqlnd_field_count(conn) (conn)->field_count#define mysqlnd_insert_id(conn) (conn)->upsert_status.last_insert_id#define mysqlnd_affected_rows(conn) (conn)->upsert_status.affected_rows#define mysqlnd_warning_count(conn) (conn)->upsert_status.warning_count#define mysqlnd_info(conn) (conn)->last_message#define mysqlnd_get_server_info(conn) (conn)->server_version#define mysqlnd_get_host_info(conn) (conn)->host_info#define mysqlnd_get_proto_info(conn) (conn)->protocol_version#define mysqlnd_thread_id(conn) (conn)->thread_id#define mysqlnd_num_rows(result) ((result)->data? (result)->data->row_count:0)#define mysqlnd_num_fields(result) (result)->field_count#define mysqlnd_fetch_lengths(result) ((result)->m.fetch_lengths? (result)->m.fetch_lengths((result)):NULL)#define mysqlnd_field_seek(result, ofs) (result)->m.seek_field((result), (ofs))#define mysqlnd_field_tell(result) ((result)->meta? (result)->meta->current_field:0)#define mysqlnd_fetch_field(result) (result)->m.fetch_field((result))#define mysqlnd_fetch_field_direct(result,fnr) ((result)->meta? &((result)->meta->fields[(fnr)]):NULL)/* mysqlnd metadata */#define mysqlnd_get_client_info() MYSQLND_VERSION#define mysqlnd_get_client_version() MYSQLND_VERSION_ID/* PS */#define mysqlnd_stmt_insert_id(stmt) (stmt)->upsert_status.last_insert_id#define mysqlnd_stmt_affected_rows(stmt) (stmt)->upsert_status.affected_rows#define mysqlnd_stmt_num_rows(stmt) (stmt)->result? mysqlnd_num_rows((stmt)->result):0#define mysqlnd_stmt_param_count(stmt) (stmt)->param_count#define mysqlnd_stmt_field_count(stmt) (stmt)->field_count#define mysqlnd_stmt_warning_count(stmt) (stmt)->upsert_status.warning_count#define mysqlnd_stmt_errno(stmt) (stmt)->error_info.error_no#define mysqlnd_stmt_error(stmt) (stmt)->error_info.error#define mysqlnd_stmt_sqlstate(stmt) ((stmt)->error_info.sqlstate[0] ? (stmt)->error_info.sqlstate:MYSQLND_SQLSTATE_NULL)/*****************************************************************************************************/#else /* Using plain functions *//*****************************************************************************************************//* Errors */#define mysqlnd_errno(conn) (conn)->m->get_error_no(conn)#define mysqlnd_error(conn) (conn)->m->get_error_str(conn)#define mysqlnd_sqlstate(conn) (conn)->m->get_sqlstate(conn)/* Simple metadata */#define mysqlnd_field_count(conn) (conn)->m->get_field_count((conn))#define mysqlnd_insert_id(conn) (conn)->m->get_last_insert_id((conn))#define mysqlnd_affected_rows(conn) (conn)->m->get_affected_rows((conn))#define mysqlnd_warning_count(conn) (conn)->m->get_warning_count((conn))#define mysqlnd_info(conn) (conn)->m->get_last_message((conn))#define mysqlnd_get_server_info(conn) (conn)->m->get_server_information((conn))#define mysqlnd_get_host_info(conn) (conn)->m->get_host_information((conn))#define mysqlnd_get_proto_info(conn) (conn)->m->get_protocol_information((conn))#define mysqlnd_thread_id(conn) (conn)->m->get_thread_id((conn))#define mysqlnd_num_rows(result) (result)->m.num_rows((result))#define mysqlnd_num_fields(result) (result)->m.num_fields((result))PHPAPI unsigned long * _mysqlnd_fetch_lengths(MYSQLND_RES * const result);#define mysqlnd_fetch_lengths(result) _mysqlnd_fetch_lengths((result))#define mysqlnd_field_seek(result, ofs) (result)->m.seek_field((result), (ofs))#define mysqlnd_field_tell(result) (result)->m.field_tell((result))#define mysqlnd_fetch_field(result) (result)->m.fetch_field((result))#define mysqlnd_fetch_field_direct(result,fnr) (result)->m.fetch_field_direct((result), (fnr))/* mysqlnd metadata */const char * _mysqlnd_get_client_info();unsigned int _mysqlnd_get_client_version();#define mysqlnd_get_client_info _mysqlnd_get_client_info#define mysqlnd_get_client_version _mysqlnd_get_client_version/* PS */#define mysqlnd_stmt_insert_id(stmt) (stmt)->m->get_last_insert_id((stmt))#define mysqlnd_stmt_affected_rows(stmt) (stmt)->m->get_affected_rows((stmt))#define mysqlnd_stmt_num_rows(stmt) (stmt)->m->get_num_rows((stmt))#define mysqlnd_stmt_param_count(stmt) (stmt)->m->get_param_count((stmt))#define mysqlnd_stmt_field_count(stmt) (stmt)->m->get_field_count((stmt))#define mysqlnd_stmt_warning_count(stmt) (stmt)->m->get_warning_count((stmt))#define mysqlnd_stmt_errno(stmt) (stmt)->m->get_error_no((stmt))#define mysqlnd_stmt_error(stmt) (stmt)->m->get_error_str((stmt))#define mysqlnd_stmt_sqlstate(stmt) (stmt)->m->get_sqlstate((stmt))#endif /* MYSQLND_USE_OPTIMISATIONS *//*****************************************************************************************************/const char * mysqlnd_field_type_name(enum mysqlnd_field_types field_type);/* LOAD DATA LOCAL */PHPAPI void mysqlnd_local_infile_default(MYSQLND *conn);PHPAPI void mysqlnd_set_local_infile_handler(MYSQLND * const conn, const char * const funcname);/* Simple commands */#define mysqlnd_autocommit(conn, mode) (conn)->m->query((conn),(mode) ? "SET AUTOCOMMIT=1":"SET AUTOCOMMIT=0", 16 TSRMLS_CC)#define mysqlnd_commit(conn) (conn)->m->query((conn), "COMMIT", sizeof("COMMIT")-1 TSRMLS_CC)#define mysqlnd_rollback(conn) (conn)->m->query((conn), "ROLLBACK", sizeof("ROLLBACK")-1 TSRMLS_CC)#define mysqlnd_dump_debug_info(conn) (conn)->m->server_dump_debug_information((conn) TSRMLS_CC)#define mysqlnd_select_db(conn, db, db_len) (conn)->m->select_db((conn), (db), (db_len) TSRMLS_CC)#define mysqlnd_ping(conn) (conn)->m->ping((conn) TSRMLS_CC)#define mysqlnd_kill(conn, pid) (conn)->m->kill_connection((conn), (pid) TSRMLS_CC)#define mysqlnd_refresh(conn, options) (conn)->m->refresh_server((conn), (options) TSRMLS_CC) #define mysqlnd_shutdown(conn, level) (conn)->m->shutdown_server((conn), (level) TSRMLS_CC)#define mysqlnd_get_server_version(conn) (conn)->m->get_server_version((conn))#define mysqlnd_set_charset(conn, charset) (conn)->m->set_charset((conn), (charset) TSRMLS_CC)#define mysqlnd_stat(conn, msg, msg_len) (conn)->m->get_server_statistics((conn), (msg), (msg_len) TSRMLS_CC)#define mysqlnd_options(conn, opt, value) (conn)->m->set_client_option((conn), (opt), (value))#define mysqlnd_set_server_option(conn, op) (conn)->m->set_server_option((conn), (op) TSRMLS_CC)/* Misc */#define mysqlnd_real_escape_string(conn, newstr, escapestr, escapestr_len) \ (conn)->m->escape_string((conn), (newstr), (escapestr), (escapestr_len))/* PS */#define mysqlnd_stmt_init(conn) (conn)->m->stmt_init((conn))#define mysqlnd_stmt_store_result(stmt) (!mysqlnd_stmt_field_count((stmt)) ? PASS:((stmt)->m->store_result((stmt) TSRMLS_CC)? PASS:FAIL))#define mysqlnd_stmt_data_seek(stmt, row) (stmt)->m->seek_data((stmt), (row))#define mysqlnd_stmt_prepare(stmt, q, qlen) (stmt)->m->prepare((stmt), (q), (qlen) TSRMLS_CC)#define mysqlnd_stmt_execute(stmt) (stmt)->m->execute((stmt) TSRMLS_CC)#define mysqlnd_stmt_send_long_data(s,p,d,l) (s)->m->send_long_data((s), (p), (d), (l) TSRMLS_CC)#define mysqlnd_stmt_bind_param(stmt,bind) (stmt)->m->bind_param((stmt), (bind))#define mysqlnd_stmt_bind_result(stmt,bind) (stmt)->m->bind_result((stmt), (bind))#define mysqlnd_stmt_param_metadata(stmt) (stmt)->m->get_parameter_metadata((stmt))#define mysqlnd_stmt_result_metadata(stmt) (stmt)->m->get_result_metadata((stmt))#define mysqlnd_stmt_free_result(stmt) (stmt)->m->free_result((stmt) TSRMLS_CC)#define mysqlnd_stmt_close(stmt, implicit) (stmt)->m->dtor((stmt), (implicit) TSRMLS_CC)#define mysqlnd_stmt_reset(stmt) (stmt)->m->reset((stmt) TSRMLS_CC)#define mysqlnd_stmt_attr_get(stmt, attr, value) (stmt)->m->get_attribute((stmt), (attr), (value))#define mysqlnd_stmt_attr_set(stmt, attr, value) (stmt)->m->set_attribute((stmt), (attr), (value))PHPAPI enum_func_status mysqlnd_stmt_fetch(MYSQLND_STMT * const stmt, zend_bool * const fetched_anything TSRMLS_DC);/* Performance statistics */PHPAPI void _mysqlnd_get_client_stats(zval *return_value TSRMLS_DC ZEND_FILE_LINE_DC);/* Persistent caching zval allocator */PHPAPI MYSQLND_ZVAL_PCACHE* mysqlnd_palloc_init_cache(unsigned int cache_size);MYSQLND_ZVAL_PCACHE* mysqlnd_palloc_get_cache_reference(MYSQLND_ZVAL_PCACHE * const cache);PHPAPI void mysqlnd_palloc_free_cache_reference(MYSQLND_ZVAL_PCACHE **cache);PHPAPI void mysqlnd_palloc_rinit(MYSQLND_ZVAL_PCACHE * const cache);PHPAPI void mysqlnd_palloc_rshutdown(MYSQLND_ZVAL_PCACHE * const cache);PHPAPI void mysqlnd_palloc_stats(const MYSQLND_ZVAL_PCACHE * const cache, zval *return_value);/* There two should not be used from outside */void * mysqlnd_palloc_get_zval(MYSQLND_ZVAL_PCACHE * const cache, zend_bool *allocated);void mysqlnd_palloc_zval_ptr_dtor(zval **zv, MYSQLND_ZVAL_PCACHE * const cache, zend_bool ps, zend_bool *copy_ctor_called TSRMLS_DC);/* ---------------------- QUERY CACHE ---------------*/struct st_mysqlnd_qcache { HashTable *ht; unsigned int references;#ifdef ZTS MUTEX_T LOCK_access;#endif};typedef struct st_mysqlnd_qcache_element { MYSQLND_RES_BUFFERED *data; MYSQLND_RES_METADATA *meta; const char * query; size_t query_len;} MYSQLND_QCACHE_ELEMENT;PHPAPI MYSQLND_QCACHE * mysqlnd_qcache_init_cache();PHPAPI MYSQLND_QCACHE * mysqlnd_qcache_get_cache_reference(MYSQLND_QCACHE * const cache);PHPAPI void mysqlnd_qcache_free_cache_reference(MYSQLND_QCACHE **cache);PHPAPI void mysqlnd_qcache_stats(const MYSQLND_QCACHE * const cache, zval *return_value);MYSQLND_RES * mysqlnd_qcache_get(MYSQLND_QCACHE * const cache, const char * query, size_t query_len);void mysqlnd_qcache_put(MYSQLND_QCACHE * const cache, char * query, size_t query_len, MYSQLND_RES_BUFFERED * const result, MYSQLND_RES_METADATA * const meta);#endif /* MYSQLND_H *//* * Local variables: * tab-width: 4 * c-basic-offset: 4 * End: * vim600: noet sw=4 ts=4 fdm=marker * vim<600: noet sw=4 ts=4 */
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -