php-internal-docs 8.4.8
Unofficial docs for php/php-src
Loading...
Searching...
No Matches
php_mysqli_structs.h
Go to the documentation of this file.
1/*
2 +----------------------------------------------------------------------+
3 | Copyright (c) The PHP Group |
4 +----------------------------------------------------------------------+
5 | This source file is subject to version 3.01 of the PHP license, |
6 | that is bundled with this package in the file LICENSE, and is |
7 | available through the world-wide-web at the following url: |
8 | https://www.php.net/license/3_01.txt |
9 | If you did not receive a copy of the PHP license and are unable to |
10 | obtain it through the world-wide-web, please send a note to |
11 | license@php.net so we can mail you a copy immediately. |
12 +----------------------------------------------------------------------+
13 | Authors: Georg Richter <georg@php.net> |
14 | Andrey Hristov <andrey@php.net> |
15 | Ulf Wendel <uw@php.net> |
16 +----------------------------------------------------------------------+
17*/
18
19#ifndef PHP_MYSQLI_STRUCTS_H
20#define PHP_MYSQLI_STRUCTS_H
21
22/* A little hack to prevent build break, when mysql is used together with
23 * c-client, which also defines LIST.
24 */
25#ifdef LIST
26#undef LIST
27#endif
28
29#include "ext/mysqlnd/mysqlnd.h"
30#include "mysqli_mysqlnd.h"
31
32
33#define MYSQLI_VERSION_ID 101009
34
40
47
48typedef struct {
49 unsigned int var_cnt;
54
61
71
72typedef struct {
73 void *ptr; /* resource: (mysql, result, stmt) */
74 void *info; /* additional buffer */
75 enum mysqli_status status; /* object status */
77
78typedef struct _mysqli_object {
79 void *ptr;
82} mysqli_object; /* extends zend_object */
83
84static inline mysqli_object *php_mysqli_fetch_object(zend_object *obj) {
85 return (mysqli_object *)((char*)(obj) - XtOffsetOf(mysqli_object, zo));
86}
87
88#define Z_MYSQLI_P(zv) php_mysqli_fetch_object(Z_OBJ_P((zv)))
89
91
98
105
109
110#ifdef PHP_WIN32
111#define PHP_MYSQLI_API __declspec(dllexport)
112#ifndef L64
113#define L64(x) x##i64
114#endif
115typedef __int64 my_longlong;
116#else
117# if defined(__GNUC__) && __GNUC__ >= 4
118# define PHP_MYSQLI_API __attribute__ ((visibility("default")))
119# else
120# define PHP_MYSQLI_API
121# endif
122#ifndef L64
123#define L64(x) x##LL
124#endif
125typedef int64_t my_longlong;
126#endif
127
128/* we need this for PRIu64 and PRId64 */
129#include <inttypes.h>
130#define MYSQLI_LLU_SPEC "%" PRIu64
131#define MYSQLI_LL_SPEC "%" PRId64
132
133#ifdef ZTS
134#include "TSRM.h"
135#endif
136
143extern int php_le_pmysqli(void);
144extern void php_mysqli_dtor_p_elements(void *data);
145
146extern void php_mysqli_close(MY_MYSQL * mysql, int close_type, int resource_status);
147
150
152
153#define MYSQLI_DISABLE_MQ if (mysql->multi_query) { \
154 mysql_set_server_option(mysql->mysql, MYSQL_OPTION_MULTI_STATEMENTS_OFF); \
155 mysql->multi_query = 0; \
156}
157
158#define MYSQLI_ENABLE_MQ if (!mysql->multi_query) { \
159 mysql_set_server_option(mysql->mysql, MYSQL_OPTION_MULTI_STATEMENTS_ON); \
160 mysql->multi_query = 1; \
161}
162
163#define MYSQLI_REGISTER_RESOURCE_EX(__ptr, __zval) \
164 (Z_MYSQLI_P(__zval))->ptr = __ptr;
165
166#define MYSQLI_RETVAL_RESOURCE(__ptr, __ce) \
167 RETVAL_OBJ(mysqli_objects_new(__ce)); \
168 MYSQLI_REGISTER_RESOURCE_EX(__ptr, return_value)
169
170#define MYSQLI_REGISTER_RESOURCE(__ptr, __ce) \
171{\
172 zval *object = getThis(); \
173 if (!object || !instanceof_function(Z_OBJCE_P(object), mysqli_link_class_entry)) { \
174 object = return_value; \
175 ZVAL_OBJ(object, mysqli_objects_new(__ce)); \
176 } \
177 MYSQLI_REGISTER_RESOURCE_EX(__ptr, object)\
178}
179
180#define MYSQLI_FETCH_RESOURCE(__ptr, __type, __id, __name, __check) \
181{ \
182 MYSQLI_RESOURCE *my_res; \
183 mysqli_object *intern = Z_MYSQLI_P(__id); \
184 if (!(my_res = (MYSQLI_RESOURCE *)intern->ptr)) {\
185 zend_throw_error(NULL, "%s object is already closed", ZSTR_VAL(intern->zo.ce->name));\
186 RETURN_THROWS();\
187 }\
188 __ptr = (__type)my_res->ptr; \
189 if (my_res->status < __check) { \
190 zend_throw_error(NULL, "%s object is not fully initialized", ZSTR_VAL(intern->zo.ce->name)); \
191 RETURN_THROWS();\
192 }\
193}
194
195#define MYSQLI_FETCH_RESOURCE_BY_OBJ(__ptr, __type, __obj, __name, __check) \
196{ \
197 MYSQLI_RESOURCE *my_res; \
198 if (!(my_res = (MYSQLI_RESOURCE *)(__obj->ptr))) {\
199 zend_throw_error(NULL, "%s object is already closed", ZSTR_VAL(intern->zo.ce->name));\
200 return;\
201 }\
202 __ptr = (__type)my_res->ptr; \
203 if (my_res->status < __check) { \
204 zend_throw_error(NULL, "%s object is not fully initialized", ZSTR_VAL(intern->zo.ce->name)); \
205 return;\
206 }\
207}
208
209#define MYSQLI_FETCH_RESOURCE_CONN(__ptr, __id, __check) \
210{ \
211 MYSQLI_FETCH_RESOURCE((__ptr), MY_MYSQL *, (__id), "mysqli_link", (__check)); \
212 if (!(__ptr)->mysql) { \
213 zend_throw_error(NULL, "%s object is not fully initialized", ZSTR_VAL(Z_OBJCE_P(__id)->name)); \
214 RETURN_THROWS(); \
215 } \
216}
217
218#define MYSQLI_FETCH_RESOURCE_STMT(__ptr, __id, __check) \
219{ \
220 MYSQLI_FETCH_RESOURCE((__ptr), MY_STMT *, (__id), "mysqli_stmt", (__check)); \
221 ZEND_ASSERT((__ptr)->stmt && "Missing statement?"); \
222}
223
224#define MYSQLI_SET_STATUS(__id, __value) \
225{ \
226 mysqli_object *intern = Z_MYSQLI_P(__id); \
227 ((MYSQLI_RESOURCE *)intern->ptr)->status = __value; \
228} \
229
230#define MYSQLI_CLEAR_RESOURCE(__id) \
231{ \
232 mysqli_object *intern = Z_MYSQLI_P(__id); \
233 efree(intern->ptr); \
234 intern->ptr = NULL; \
235}
236
237
257
258#define MyG(v) ZEND_MODULE_GLOBALS_ACCESSOR(mysqli, v)
259
260#if defined(ZTS) && defined(COMPILE_DL_MYSQLI)
262#endif
263
265
266#endif /* PHP_MYSQLI_STRUCTS.H */
zend_class_entry * mysqli_result_class_entry
Definition mysqli.c:68
zend_class_entry * mysqli_warning_class_entry
Definition mysqli.c:70
zend_class_entry * mysqli_driver_class_entry
Definition mysqli.c:69
zend_class_entry * mysqli_exception_class_entry
Definition mysqli.c:71
zend_class_entry * mysqli_stmt_class_entry
Definition mysqli.c:67
zend_class_entry * mysqli_link_class_entry
Definition mysqli.c:66
const zend_object_iterator_funcs php_mysqli_result_iterator_funcs
#define MYSQL_RES
#define MYSQL
#define my_bool
#define MYSQL_STMT
zend_long num_links
Definition php_ldap.h:40
zend_long max_links
Definition php_ldap.h:41
char * default_pw
bool allow_local_infile
char * default_socket
struct st_mysqli_warning MYSQLI_WARNING
char * default_user
zend_object_iterator * php_mysqli_result_get_iterator(zend_class_entry *ce, zval *object, int by_ref)
zend_long num_active_persistent
zend_long report_mode
void php_mysqli_fetch_into_hash_aux(zval *return_value, MYSQL_RES *result, zend_long fetchtype)
Definition mysqli.c:727
zend_ulong default_port
zend_long num_inactive_persistent
zend_long error_no
zend_long max_persistent
int64_t my_longlong
char * error_msg
void php_mysqli_dtor_p_elements(void *data)
Definition mysqli.c:90
struct _mysqli_object mysqli_object
char * default_host
bool allow_persistent
char * local_infile_directory
struct _mysqli_property_entry mysqli_property_entry
void php_mysqli_close(MY_MYSQL *mysql, int close_type, int resource_status)
Definition mysqli_api.c:234
int php_le_pmysqli(void)
Definition mysqli.c:108
bool rollback_on_cached_plink
mysqli_status
@ MYSQLI_STATUS_UNKNOWN
@ MYSQLI_STATUS_VALID
@ MYSQLI_STATUS_INITIALIZED
struct _php_stream php_stream
Definition php_streams.h:96
zend_constant * data
unsigned int var_cnt
VAR_BUFFER * buf
enum mysqli_status status
int async_result_fetch_type
php_stream * li_stream
unsigned int multi_query
zend_string * hash_key
BIND_BUFFER result
BIND_BUFFER param
MYSQL_STMT * stmt
zend_ulong buflen
zend_ulong output_len
zend_ulong type
HashTable * prop_handler
zend_result(* r_func)(mysqli_object *obj, zval *retval, bool quiet)
size_t pname_length
const char * pname
zend_result(* w_func)(mysqli_object *obj, zval *value)
zend_ptr_stack free_links
MYSQLI_WARNING * next
#define ZEND_TSRMLS_CACHE_EXTERN()
Definition zend.h:67
#define ZEND_END_MODULE_GLOBALS(module_name)
Definition zend_API.h:248
#define ZEND_EXTERN_MODULE_GLOBALS(module_name)
Definition zend_API.h:270
#define ZEND_BEGIN_MODULE_GLOBALS(module_name)
Definition zend_API.h:246
struct _zval_struct zval
struct _zend_object_iterator zend_object_iterator
struct _zend_object_iterator_funcs zend_object_iterator_funcs
int32_t zend_long
Definition zend_long.h:42
uint32_t zend_ulong
Definition zend_long.h:43
struct _zend_string zend_string
#define XtOffsetOf(s_type, field)
struct _zend_class_entry zend_class_entry
struct _zend_object zend_object
struct _zend_ptr_stack zend_ptr_stack
struct _zend_array HashTable
Definition zend_types.h:386
ZEND_RESULT_CODE zend_result
Definition zend_types.h:64
zval retval
zval * return_value
bool result
value