28#define CHECK_STATUS(value, quiet) \
29 if (!obj->ptr || ((MYSQLI_RESOURCE *)obj->ptr)->status < value ) { \
31 zend_throw_error(NULL, "Property access is not allowed yet"); \
36#define MYSQLI_GET_MYSQL(statusval) \
38if (!obj->ptr || !(MY_MYSQL *)((MYSQLI_RESOURCE *)(obj->ptr))->ptr) { \
40 zend_throw_error(NULL, "%s object is already closed", ZSTR_VAL(obj->zo.ce->name)); \
44 CHECK_STATUS(statusval, quiet);\
45 p = (MYSQL *)((MY_MYSQL *)((MYSQLI_RESOURCE *)(obj->ptr))->ptr)->mysql;\
48#define MYSQLI_GET_RESULT(statusval) \
52 zend_throw_error(NULL, "%s object is already closed", ZSTR_VAL(obj->zo.ce->name)); \
56 CHECK_STATUS(statusval, quiet);\
57 p = (MYSQL_RES *)((MYSQLI_RESOURCE *)(obj->ptr))->ptr; \
60#define MYSQLI_GET_STMT(statusval) \
64 zend_throw_error(NULL, "%s object is already closed", ZSTR_VAL(obj->zo.ce->name)); \
68 CHECK_STATUS(statusval, quiet); \
69 p = (MYSQL_STMT *)((MY_STMT *)((MYSQLI_RESOURCE *)(obj->ptr))->ptr)->stmt; \
72#define MYSQLI_MAP_PROPERTY_FUNC_LONG_OR_STR( __func, __int_func, __get_type, __ret_type, __ret_type_sprint_mod)\
73static zend_result __func(mysqli_object *obj, zval *retval, bool quiet) \
78 l = (__ret_type)__int_func(p);\
79 if (l < ZEND_LONG_MAX) {\
80 ZVAL_LONG(retval, (zend_long) l);\
82 ZVAL_NEW_STR(retval, strpprintf(0, __ret_type_sprint_mod, l)); \
87#define MYSQLI_MAP_PROPERTY_FUNC_LONG( __func, __int_func, __get_type, __ret_type, __ret_type_sprint_mod)\
88static zend_result __func(mysqli_object *obj, zval *retval, bool quiet) \
93 l = (__ret_type)__int_func(p);\
94 ZEND_ASSERT(l < ZEND_LONG_MAX);\
95 ZVAL_LONG(retval, (zend_long) l);\
99#define MYSQLI_MAP_PROPERTY_FUNC_STR_OR_NULL(__func, __int_func, __get_type)\
100static zend_result __func(mysqli_object *obj, zval *retval, bool quiet)\
105 c = (char *)__int_func(p);\
107 ZVAL_STRING(retval, c);\
114#define MYSQLI_MAP_PROPERTY_FUNC_STR(__func, __int_func, __get_type)\
115static zend_result __func(mysqli_object *obj, zval *retval, bool quiet)\
120 c = (char *)__int_func(p);\
122 ZVAL_STRING(retval, c);\
216 add_next_index_zval(
retval, &single_error);
262 uint32_t field_count;
274 for (i = 0; i < field_count; i++) {
341 if (stmt && stmt->
stmt) {
343 if (stmt->
stmt->data && stmt->
stmt->data->error_info) {
355 add_next_index_zval(
retval, &single_error);
376 {
"affected_rows",
sizeof(
"affected_rows") - 1, link_affected_rows_read,
NULL},
377 {
"client_info",
sizeof(
"client_info") - 1, link_client_info_read,
NULL},
378 {
"client_version",
sizeof(
"client_version") - 1, link_client_version_read,
NULL},
379 {
"connect_errno",
sizeof(
"connect_errno") - 1, link_connect_errno_read,
NULL},
380 {
"connect_error",
sizeof(
"connect_error") - 1, link_connect_error_read,
NULL},
381 {
"errno",
sizeof(
"errno") - 1, link_errno_read,
NULL},
382 {
"error",
sizeof(
"error") - 1, link_error_read,
NULL},
383 {
"error_list",
sizeof(
"error_list") - 1, link_error_list_read,
NULL},
384 {
"field_count",
sizeof(
"field_count") - 1, link_field_count_read,
NULL},
385 {
"host_info",
sizeof(
"host_info") - 1, link_host_info_read,
NULL},
386 {
"info",
sizeof(
"info") - 1, link_info_read,
NULL},
387 {
"insert_id",
sizeof(
"insert_id") - 1, link_insert_id_read,
NULL},
388 {
"server_info",
sizeof(
"server_info") - 1, link_server_info_read,
NULL},
389 {
"server_version",
sizeof(
"server_version") - 1, link_server_version_read,
NULL},
390 {
"sqlstate",
sizeof(
"sqlstate") - 1, link_sqlstate_read,
NULL},
391 {
"protocol_version",
sizeof(
"protocol_version") - 1, link_protocol_version_read,
NULL},
392 {
"thread_id",
sizeof(
"thread_id") - 1, link_thread_id_read,
NULL},
393 {
"warning_count",
sizeof(
"warning_count") - 1, link_warning_count_read,
NULL},
399 {
"current_field",
sizeof(
"current_field")-1, result_current_field_read,
NULL},
400 {
"field_count",
sizeof(
"field_count") - 1, result_field_count_read,
NULL},
401 {
"lengths",
sizeof(
"lengths") - 1, result_lengths_read,
NULL},
402 {
"num_rows",
sizeof(
"num_rows") - 1, result_num_rows_read,
NULL},
403 {
"type",
sizeof(
"type") - 1, result_type_read,
NULL},
408 {
"affected_rows",
sizeof(
"affected_rows")-1,stmt_affected_rows_read,
NULL},
409 {
"insert_id",
sizeof(
"insert_id") - 1, stmt_insert_id_read,
NULL},
410 {
"num_rows",
sizeof(
"num_rows") - 1, stmt_num_rows_read,
NULL},
411 {
"param_count",
sizeof(
"param_count") - 1, stmt_param_count_read,
NULL},
412 {
"field_count",
sizeof(
"field_count") - 1, stmt_field_count_read,
NULL},
413 {
"errno",
sizeof(
"errno") - 1, stmt_errno_read,
NULL},
414 {
"error",
sizeof(
"error") - 1, stmt_error_read,
NULL},
415 {
"error_list",
sizeof(
"error_list") - 1, stmt_error_list_read,
NULL},
416 {
"sqlstate",
sizeof(
"sqlstate") - 1, stmt_sqlstate_read,
NULL},
417 {
"id",
sizeof(
"id") - 1, stmt_id_read,
NULL},
#define mysqli_result_is_unbuffered(r)
#define mysqli_stmt_get_id(s)
#define MYSQLI_STORE_RESULT
const mysqli_property_entry mysqli_stmt_property_entries[]
#define MYSQLI_USE_RESULT
const mysqli_property_entry mysqli_result_property_entries[]
const mysqli_property_entry mysqli_link_property_entries[]
#define MYSQLI_MAP_PROPERTY_FUNC_LONG_OR_STR(__func, __int_func, __get_type, __ret_type, __ret_type_sprint_mod)
#define MYSQLI_GET_MYSQL(statusval)
#define MYSQLI_MAP_PROPERTY_FUNC_STR_OR_NULL(__func, __int_func, __get_type)
#define MYSQLI_MAP_PROPERTY_FUNC_STR(__func, __int_func, __get_type)
#define MYSQLI_GET_STMT(statusval)
#define MYSQLI_GET_RESULT(statusval)
#define MYSQLI_MAP_PROPERTY_FUNC_LONG(__func, __int_func, __get_type, __ret_type, __ret_type_sprint_mod)
#define CHECK_STATUS(value, quiet)
#define mysql_stmt_param_count(s)
#define mysql_get_proto_info(r)
#define mysql_insert_id(r)
#define mysql_stmt_error(s)
#define mysql_field_tell(r)
#define mysql_thread_id(r)
#define mysql_warning_count(r)
#define mysql_sqlstate(r)
#define mysql_num_rows(r)
#define mysql_field_count(r)
#define mysql_stmt_errno(s)
#define mysql_affected_rows(r)
#define mysql_fetch_lengths(r)
#define mysql_stmt_field_count(s)
#define mysql_stmt_sqlstate(s)
#define MYSQL_SERVER_VERSION
#define mysql_get_host_info(r)
#define mysql_stmt_insert_id(s)
#define mysql_stmt_affected_rows(s)
#define mysql_stmt_num_rows(s)
#define mysql_get_server_info(r)
#define mysql_num_fields(r)
#define mysql_get_server_version(r)
struct st_mysqlnd_error_list_element MYSQLND_ERROR_LIST_ELEMENT
unsigned const char * pos
struct _mysqli_object mysqli_object
struct _mysqli_property_entry mysqli_property_entry
@ MYSQLI_STATUS_INITIALIZED
char sqlstate[MYSQLND_SQLSTATE_LENGTH+1]
ZEND_API void add_assoc_string_ex(zval *arg, const char *key, size_t key_len, const char *str)
ZEND_API void add_assoc_long_ex(zval *arg, const char *key, size_t key_len, zend_long n)
ZEND_API void add_index_long(zval *arg, zend_ulong index, zend_long n)
#define ZVAL_STRING(z, s)
#define ZVAL_EMPTY_ARRAY(z)
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
#define ZVAL_NEW_STR(z, s)
ZEND_RESULT_CODE zend_result