/* +----------------------------------------------------------------------+ | PHP Version 5 | +----------------------------------------------------------------------+ | Copyright (c) 1997-2002 The PHP Group | +----------------------------------------------------------------------+ | This source file is subject to version 3.0 of the PHP license, | | that is bundled with this package in the file LICENSE, and is | | available through the world-wide-web at the following url: | | http://www.php.net/license/3_0.txt. | | If you did not receive a copy of the PHP license and are unable to | | obtain it through the world-wide-web, please send a note to | | license@php.net so we can mail you a copy immediately. | +----------------------------------------------------------------------+ | Author: Georg Richter | +----------------------------------------------------------------------+ $Id$ */ #ifdef HAVE_CONFIG_H #include "config.h" #endif #include #include "php.h" #include "php_ini.h" #include "ext/standard/info.h" #include "php_mysqli.h" #define MYSQLI_MAP_PROPERTY_LONG(__func, __type, __val)\ int __func(mysqli_object *obj, zval **retval TSRMLS_DC) \ {\ __type *p = (__type *)((MYSQLI_RESOURCE *)(obj->ptr))->ptr;\ ALLOC_ZVAL(*retval);\ if (!p) {\ ZVAL_NULL(*retval);\ } else {\ ZVAL_LONG(*retval, (long)p->__val);\ }\ return SUCCESS;\ }\ #define MYSQLI_MAP_PROPERTY_STRING(__func, __type, __val)\ int __func(mysqli_object *obj, zval **retval TSRMLS_DC) \ {\ __type *p = (__type *)((MYSQLI_RESOURCE *)(obj->ptr))->ptr;\ ALLOC_ZVAL(*retval);\ if (!p) {\ ZVAL_NULL(*retval);\ } else {\ if (!p->__val) {\ ZVAL_NULL(*retval);\ } else {\ ZVAL_STRING(*retval, p->__val, 1);\ }\ }\ return SUCCESS;\ }\ /* {{{ property link_client_version_read */ int link_client_version_read(mysqli_object *obj, zval **retval TSRMLS_DC) { ALLOC_ZVAL(*retval); ZVAL_STRING(*retval, MYSQL_SERVER_VERSION, 1); return SUCCESS; } /* }}} */ /* link properties */ MYSQLI_MAP_PROPERTY_LONG(link_affected_rows_read, MYSQL, affected_rows); MYSQLI_MAP_PROPERTY_LONG(link_client_flags_read, MYSQL, client_flag); MYSQLI_MAP_PROPERTY_LONG(link_errno_read, MYSQL, net.last_errno); MYSQLI_MAP_PROPERTY_STRING(link_error_read, MYSQL, net.last_error); MYSQLI_MAP_PROPERTY_LONG(link_field_count_read, MYSQL, field_count); MYSQLI_MAP_PROPERTY_STRING(link_host_read, MYSQL, host); MYSQLI_MAP_PROPERTY_STRING(link_host_info_read, MYSQL, host_info); MYSQLI_MAP_PROPERTY_STRING(link_info_read, MYSQL, info); MYSQLI_MAP_PROPERTY_LONG(link_insert_id_read, MYSQL, last_used_con->insert_id); MYSQLI_MAP_PROPERTY_LONG(link_port_read, MYSQL, port); MYSQLI_MAP_PROPERTY_LONG(link_protocol_version_read, MYSQL, protocol_version); MYSQLI_MAP_PROPERTY_LONG(link_server_capabilities_read, MYSQL, server_capabilities); MYSQLI_MAP_PROPERTY_LONG(link_server_language_read, MYSQL, server_language); MYSQLI_MAP_PROPERTY_LONG(link_server_status_read, MYSQL, server_status); MYSQLI_MAP_PROPERTY_STRING(link_server_version_read, MYSQL, server_version); MYSQLI_MAP_PROPERTY_STRING(link_sqlstate_read, MYSQL, net.sqlstate); MYSQLI_MAP_PROPERTY_LONG(link_thread_id_read, MYSQL, thread_id); MYSQLI_MAP_PROPERTY_STRING(link_user_read, MYSQL, user); MYSQLI_MAP_PROPERTY_LONG(link_warning_count_read, MYSQL, warning_count); /* result properties */ /* {{{ property result_type_read */ int result_type_read(mysqli_object *obj, zval **retval TSRMLS_DC) { MYSQL_RES *p = (MYSQL_RES *)((MYSQLI_RESOURCE *)(obj->ptr))->ptr; ALLOC_ZVAL(*retval); if (!p) { ZVAL_NULL(*retval); } else { ZVAL_LONG(*retval, (p->data) ? MYSQLI_STORE_RESULT : MYSQLI_USE_RESULT); } return SUCCESS; } /* }}} */ /* {{{ property result_lengths_read */ int result_lengths_read(mysqli_object *obj, zval **retval TSRMLS_DC) { MYSQL_RES *p = (MYSQL_RES *)((MYSQLI_RESOURCE *)(obj->ptr))->ptr; ALLOC_ZVAL(*retval); if (!p || !p->field_count) { ZVAL_NULL(*retval); } else { ulong i; zval *l; array_init(*retval); for (i=0; i < p->field_count; i++) { MAKE_STD_ZVAL(l); ZVAL_LONG(l, p->lengths[i]); add_index_zval(*retval, i, l); } } return SUCCESS; } /* }}} */ MYSQLI_MAP_PROPERTY_LONG(result_current_field_read, MYSQL_RES, current_field); MYSQLI_MAP_PROPERTY_LONG(result_field_count_read, MYSQL_RES, field_count); MYSQLI_MAP_PROPERTY_LONG(result_num_rows_read, MYSQL_RES, row_count); /* statement properties */ MYSQLI_MAP_PROPERTY_STRING(stmt_query_read, MYSQL_STMT, query); MYSQLI_MAP_PROPERTY_LONG(stmt_param_count_read, MYSQL_STMT, param_count); MYSQLI_MAP_PROPERTY_LONG(stmt_field_count_read, MYSQL_STMT, field_count); MYSQLI_MAP_PROPERTY_LONG(stmt_id_read, MYSQL_STMT, stmt_id); MYSQLI_MAP_PROPERTY_LONG(stmt_errno_read, MYSQL_STMT, last_errno); MYSQLI_MAP_PROPERTY_STRING(stmt_error_read, MYSQL_STMT, last_error); MYSQLI_MAP_PROPERTY_STRING(stmt_sqlstate_read, MYSQL_STMT, sqlstate); mysqli_property_entry mysqli_link_property_entries[] = { {"affected_rows", link_affected_rows_read, NULL}, {"client_flags", link_client_flags_read, NULL}, {"client_version", link_client_version_read, NULL}, {"errno", link_errno_read, NULL}, {"error", link_error_read, NULL}, {"field_count", link_field_count_read, NULL}, {"host", link_host_read, NULL}, {"host_info", link_host_info_read, NULL}, {"info", link_info_read, NULL}, {"insert_id", link_insert_id_read, NULL}, {"server_capabilities", link_server_capabilities_read, NULL}, {"server_status", link_server_status_read, NULL}, {"server_version", link_server_version_read, NULL}, {"sqlstate", link_sqlstate_read, NULL}, {"port", link_port_read, NULL}, {"protocol_version", link_protocol_version_read, NULL}, {"server_language", link_protocol_version_read, NULL}, {"thread_id", link_thread_id_read, NULL}, {"user", link_user_read, NULL}, {"warning_count", link_warning_count_read, NULL}, {NULL, NULL, NULL} }; mysqli_property_entry mysqli_result_property_entries[] = { {"current_field", result_current_field_read, NULL}, {"field_count", result_field_count_read, NULL}, {"lengths", result_lengths_read, NULL}, {"num_rows", result_num_rows_read, NULL}, {"type", result_type_read, NULL}, {NULL, NULL, NULL} }; mysqli_property_entry mysqli_stmt_property_entries[] = { {"query", stmt_query_read, NULL}, {"param_count", stmt_param_count_read, NULL}, {"field_count", stmt_field_count_read, NULL}, {"id", stmt_id_read, NULL}, {"errno", stmt_errno_read, NULL}, {"error", stmt_error_read, NULL}, {"sqlstate", stmt_sqlstate_read, NULL}, {NULL, NULL, NULL} };