17#ifndef PHP_PDO_DRIVER_H
18#define PHP_PDO_DRIVER_H
37#define PDO_DRIVER_API 20240423
62#define PDO_PARAM_FLAGS 0xFFFF0000
64#define PDO_PARAM_TYPE(x) ((x) & ~PDO_PARAM_FLAGS)
83#define PDO_FETCH_FLAGS 0xFFFF0000
84#define PDO_FETCH_GROUP 0x00010000
85#define PDO_FETCH_UNIQUE 0x00030000
86#define PDO_FETCH_CLASSTYPE 0x00040000
87#define PDO_FETCH_SERIALIZE 0x00080000
88#define PDO_FETCH_PROPS_LATE 0x00100000
155#define PDO_ERR_NONE "00000"
182 return zval_get_long(
v);
191 return zval_try_get_string(
v);
193 return defval ? zend_string_copy(defval) :
NULL;
204#define PDO_DRIVER_HEADER(name) \
205 #name, sizeof(#name)-1, \
527#define Z_PDO_DBH_P(zv) php_pdo_dbh_fetch_inner(Z_OBJ_P((zv)))
528#define Z_PDO_OBJECT_P(zv) php_pdo_dbh_fetch_object(Z_OBJ_P((zv)))
648#define Z_PDO_STMT_P(zv) php_pdo_stmt_fetch_object(Z_OBJ_P((zv)))
PHP_JSON_API size_t int options
int(* pdo_stmt_set_attr_func)(pdo_stmt_t *stmt, zend_long attr, zval *val)
PDO_API int pdo_parse_params(pdo_stmt_t *stmt, zend_string *inquery, zend_string **outquery)
bool(* pdo_dbh_prepare_func)(pdo_dbh_t *dbh, zend_string *sql, pdo_stmt_t *stmt, zval *driver_options)
struct _pdo_dbh_t pdo_dbh_t
PDO_API void pdo_throw_exception(unsigned int driver_errcode, char *driver_errmsg, pdo_error_type *pdo_error)
PDO_API int php_pdo_parse_data_source(const char *data_source, zend_ulong data_source_len, struct pdo_data_src_parser *parsed, int nparams)
void(* pdo_dbh_request_shutdown)(pdo_dbh_t *dbh)
PDO_API void php_pdo_unregister_driver(const pdo_driver_t *driver)
int(* pdo_dbh_get_attr_func)(pdo_dbh_t *dbh, zend_long attr, zval *val)
struct _pdo_stmt_t pdo_stmt_t
const zend_function_entry *(* pdo_dbh_get_driver_methods_func)(pdo_dbh_t *dbh, int kind)
PDO_API zend_result php_pdo_register_driver(const pdo_driver_t *driver)
PDO_API void php_pdo_dbh_addref(pdo_dbh_t *dbh)
zend_long(* pdo_dbh_do_func)(pdo_dbh_t *dbh, const zend_string *sql)
zend_string *(* pdo_dbh_quote_func)(pdo_dbh_t *dbh, const zend_string *unquoted, enum pdo_param_type paramtype)
PDO_API zend_result php_pdo_register_driver_specific_ce(const pdo_driver_t *driver, zend_class_entry *ce)
bool(* pdo_dbh_set_attr_func)(pdo_dbh_t *dbh, zend_long attr, zval *val)
struct _pdo_row_t pdo_row_t
bool(* pdo_dbh_txn_func)(pdo_dbh_t *dbh)
void(* pdo_dbh_get_gc_func)(pdo_dbh_t *dbh, zend_get_gc_buffer *buffer)
int(* pdo_stmt_get_attr_func)(pdo_stmt_t *stmt, zend_long attr, zval *val)
@ PDO_PARAM_EVT_FETCH_POST
@ PDO_PARAM_EVT_NORMALIZE
@ PDO_PARAM_EVT_FETCH_PRE
@ PDO_PARAM_EVT_EXEC_POST
PDO_API zend_class_entry * php_pdo_get_dbh_ce(void)
PDO_API bool pdo_get_long_param(zend_long *lval, zval *value)
zend_result(* pdo_dbh_check_liveness_func)(pdo_dbh_t *dbh)
struct _pdo_scanner_t pdo_scanner_t
int(* pdo_stmt_fetch_func)(pdo_stmt_t *stmt, enum pdo_fetch_orientation ori, zend_long offset)
@ PDO_DBH_DRIVER_METHOD_KIND_DBH
@ PDO_DBH_DRIVER_METHOD_KIND_STMT
@ PDO_DBH_DRIVER_METHOD_KIND__MAX
@ PDO_PLACEHOLDER_POSITIONAL
int(* pdo_stmt_execute_func)(pdo_stmt_t *stmt)
void(* pdo_dbh_close_func)(pdo_dbh_t *dbh)
void(* pdo_dbh_fetch_error_func)(pdo_dbh_t *dbh, pdo_stmt_t *stmt, zval *info)
int(* pdo_stmt_next_rowset_func)(pdo_stmt_t *stmt)
PDO_API void php_pdo_stmt_set_column_count(pdo_stmt_t *stmt, int new_count)
PDO_API bool pdo_get_bool_param(bool *bval, zval *value)
int(* pdo_stmt_dtor_func)(pdo_stmt_t *stmt)
int(* pdo_stmt_get_col_data_func)(pdo_stmt_t *stmt, int colno, zval *result, enum pdo_param_type *type)
PDO_API zend_class_entry * php_pdo_get_exception(void)
PDO_API void php_pdo_dbh_delref(pdo_dbh_t *dbh)
PDO_API void php_pdo_free_statement(pdo_stmt_t *stmt)
PDO_API void pdo_raise_impl_error(pdo_dbh_t *dbh, pdo_stmt_t *stmt, pdo_error_type sqlstate, const char *supp)
int(* pdo_dbh_sql_scanner)(pdo_scanner_t *s)
int(* pdo_stmt_cursor_closer_func)(pdo_stmt_t *stmt)
PDO_API void php_pdo_internal_construct_driver(INTERNAL_FUNCTION_PARAMETERS, zend_object *current_object, zend_class_entry *called_scope, zval *new_zval_object)
int(* pdo_stmt_param_hook_func)(pdo_stmt_t *stmt, struct pdo_bound_param_data *param, enum pdo_param_event event_type)
int(* pdo_stmt_describe_col_func)(pdo_stmt_t *stmt, int colno)
struct _pdo_dbh_object_t pdo_dbh_object_t
int(* pdo_stmt_get_column_meta_func)(pdo_stmt_t *stmt, zend_long colno, zval *return_value)
@ PDO_ATTR_STATEMENT_CLASS
@ PDO_ATTR_EMULATE_PREPARES
@ PDO_ATTR_DEFAULT_STR_PARAM
@ PDO_ATTR_MAX_COLUMN_LEN
@ PDO_ATTR_FETCH_CATALOG_NAMES
@ PDO_ATTR_CONNECTION_STATUS
@ PDO_ATTR_SERVER_VERSION
@ PDO_ATTR_DRIVER_SPECIFIC
@ PDO_ATTR_STRINGIFY_FETCHES
@ PDO_ATTR_DEFAULT_FETCH_MODE
@ PDO_ATTR_FETCH_TABLE_NAMES
@ PDO_ATTR_CLIENT_VERSION
zend_string *(* pdo_dbh_last_id_func)(pdo_dbh_t *dbh, const zend_string *name)
unsigned max_escaped_char_length
HashTable * cls_methods[PDO_DBH_DRIVER_METHOD_KIND__MAX]
const char * persistent_id
enum pdo_case_conversion native_case desired_case
enum pdo_fetch_type default_fetch_type
pdo_error_type error_code
enum pdo_error_mode error_mode
unsigned alloc_own_columns
zend_class_entry * def_stmt_ce
const struct pdo_dbh_methods * methods
const char * named_rewrite_template
zend_string * active_query_string
zend_string * query_string
unsigned supports_placeholders
pdo_error_type error_code
const struct pdo_stmt_methods * methods
struct pdo_column_data * columns
zend_fcall_info_cache fcc
enum pdo_fetch_type default_fetch_type
zval database_object_handle
union _pdo_stmt_t::@000166265162112000164105002261207304326156154222 fetch
HashTable * bound_param_map
HashTable * bound_columns
enum pdo_param_type param_type
pdo_dbh_txn_func rollback
pdo_dbh_fetch_error_func fetch_err
pdo_dbh_get_driver_methods_func get_driver_methods
pdo_dbh_check_liveness_func check_liveness
pdo_dbh_get_gc_func get_gc
pdo_dbh_quote_func quoter
pdo_dbh_get_attr_func get_attribute
pdo_dbh_last_id_func last_id
pdo_dbh_close_func closer
pdo_dbh_set_attr_func set_attribute
pdo_dbh_sql_scanner scanner
pdo_dbh_prepare_func preparer
pdo_dbh_request_shutdown persistent_shutdown
pdo_dbh_txn_func in_transaction
int(* db_handle_factory)(pdo_dbh_t *dbh, zval *driver_options)
pdo_stmt_param_hook_func param_hook
pdo_stmt_fetch_func fetcher
pdo_stmt_cursor_closer_func cursor_closer
pdo_stmt_next_rowset_func next_rowset
pdo_stmt_get_col_data_func get_col
pdo_stmt_get_attr_func get_attribute
pdo_stmt_execute_func executer
pdo_stmt_describe_col_func describer
pdo_stmt_get_column_meta_func get_column_meta
pdo_stmt_set_attr_func set_attribute
#define INTERNAL_FUNCTION_PARAMETERS
struct _zend_fcall_info_cache zend_fcall_info_cache
struct _zend_function_entry zend_function_entry
struct _zend_fcall_info zend_fcall_info
ZEND_API void(ZEND_FASTCALL *zend_touch_vm_stack_data)(void *vm_stack_data)
ZEND_API zval *ZEND_FASTCALL zend_hash_index_find(const HashTable *ht, zend_ulong h)
struct _zend_string zend_string
#define XtOffsetOf(s_type, field)
struct _zend_class_entry zend_class_entry
struct _zend_object zend_object
#define Z_ARRVAL_P(zval_p)
struct _zend_array HashTable
ZEND_RESULT_CODE zend_result