2
+----------------------------------------------------------------------+
4
+----------------------------------------------------------------------+
5
| Copyright (c) 1997-2004 The PHP Group |
6
+----------------------------------------------------------------------+
7
| This source file is subject to version 3.0 of the PHP license, |
8
| that is bundled with this package in the file LICENSE, and is |
9
| available through the world-wide-web at the following url: |
10
| http://www.php.net/license/3_0.txt. |
11
| If you did not receive a copy of the PHP license and are unable to |
12
| obtain it through the world-wide-web, please send a note to |
13
| license@php.net so we can mail you a copy immediately. |
14
+----------------------------------------------------------------------+
15
| Author: Georg Richter <georg@php.net> |
16
+----------------------------------------------------------------------+
18
$Id: mysqli_prop.c,v 1.14.2.6 2005/03/30 13:52:39 jorton Exp $
29
#include "ext/standard/info.h"
30
#include "php_mysqli.h"
32
#define CHECK_OBJECT() \
34
php_error_docref(NULL TSRMLS_CC, E_WARNING, "Property access is not allowed yet. Call the default constructor of the object first"); \
41
#define MYSQLI_GET_MYSQL() \
45
p = (MYSQL *)((MY_MYSQL *)((MYSQLI_RESOURCE *)(obj->ptr))->ptr)->mysql;
47
#define MYSQLI_GET_RESULT() \
51
p = (MYSQL_RES *)((MYSQLI_RESOURCE *)(obj->ptr))->ptr
53
#define MYSQLI_GET_STMT() \
57
p = (MYSQL_STMT *)((MY_STMT *)((MYSQLI_RESOURCE *)(obj->ptr))->ptr)->stmt
59
#define MYSQLI_MAP_PROPERTY_FUNC_LONG( __func, __int_func, __get_type, __ret_type)\
60
static int __func(mysqli_object *obj, zval **retval TSRMLS_DC) \
67
l = (__ret_type)__int_func(p);\
69
ZVAL_LONG(*retval, l);\
72
sprintf(ret, "%llu", (my_ulonglong)l); \
73
ZVAL_STRING(*retval, ret, 1); \
79
#define MYSQLI_MAP_PROPERTY_FUNC_STRING(__func, __int_func, __get_type)\
80
static int __func(mysqli_object *obj, zval **retval TSRMLS_DC)\
87
c = (char *)__int_func(p);\
91
ZVAL_STRING(*retval, c, 1);\
97
/* {{{ property link_client_version_read */
98
static int link_client_version_read(mysqli_object *obj, zval **retval TSRMLS_DC)
101
ZVAL_LONG(*retval, MYSQL_VERSION_ID);
106
/* {{{ property link_client_info_read */
107
static int link_client_info_read(mysqli_object *obj, zval **retval TSRMLS_DC)
110
ZVAL_STRING(*retval, MYSQL_SERVER_VERSION, 1);
115
/* {{{ property link_connect_errno_read */
116
static int link_connect_errno_read(mysqli_object *obj, zval **retval TSRMLS_DC)
119
ZVAL_LONG(*retval, (long)MyG(error_no));
124
/* {{{ property link_connect_error_read */
125
static int link_connect_error_read(mysqli_object *obj, zval **retval TSRMLS_DC)
128
ZVAL_STRING(*retval, MyG(error_msg), 1);
133
/* {{{ property link_affected_rows_read */
134
static int link_affected_rows_read(mysqli_object *obj, zval **retval TSRMLS_DC)
142
mysql = (MY_MYSQL *)((MYSQLI_RESOURCE *)(obj->ptr))->ptr;
143
rc = mysql_affected_rows(mysql->mysql);
145
if (rc == (my_ulonglong)-1) {
146
ZVAL_LONG(*retval, -1);
151
ZVAL_LONG(*retval, rc);
154
sprintf(ret, "%llu", (my_ulonglong) rc);
155
ZVAL_STRING(*retval, ret, 1);
162
/* link properties */
163
MYSQLI_MAP_PROPERTY_FUNC_LONG(link_errno_read, mysql_errno, MYSQLI_GET_MYSQL(), ulong);
164
MYSQLI_MAP_PROPERTY_FUNC_STRING(link_error_read, mysql_error, MYSQLI_GET_MYSQL());
165
MYSQLI_MAP_PROPERTY_FUNC_LONG(link_field_count_read, mysql_field_count, MYSQLI_GET_MYSQL(), ulong);
166
MYSQLI_MAP_PROPERTY_FUNC_STRING(link_host_info_read, mysql_get_host_info, MYSQLI_GET_MYSQL());
167
MYSQLI_MAP_PROPERTY_FUNC_STRING(link_info_read, mysql_info, MYSQLI_GET_MYSQL());
168
MYSQLI_MAP_PROPERTY_FUNC_LONG(link_insert_id_read, mysql_insert_id, MYSQLI_GET_MYSQL(), my_ulonglong);
169
MYSQLI_MAP_PROPERTY_FUNC_LONG(link_protocol_version_read, mysql_get_proto_info, MYSQLI_GET_MYSQL(), ulong);
170
MYSQLI_MAP_PROPERTY_FUNC_STRING(link_server_info_read, mysql_get_server_info, MYSQLI_GET_MYSQL());
171
MYSQLI_MAP_PROPERTY_FUNC_LONG(link_server_version_read, mysql_get_server_version, MYSQLI_GET_MYSQL(), ulong);
172
MYSQLI_MAP_PROPERTY_FUNC_STRING(link_sqlstate_read, mysql_sqlstate, MYSQLI_GET_MYSQL());
173
MYSQLI_MAP_PROPERTY_FUNC_LONG(link_thread_id_read, mysql_thread_id, MYSQLI_GET_MYSQL(), ulong);
174
MYSQLI_MAP_PROPERTY_FUNC_LONG(link_warning_count_read, mysql_warning_count, MYSQLI_GET_MYSQL(), ulong);
175
/* result properties */
177
/* {{{ property result_type_read */
178
static int result_type_read(mysqli_object *obj, zval **retval TSRMLS_DC)
185
p = (MYSQL_RES *)((MYSQLI_RESOURCE *)(obj->ptr))->ptr;
190
ZVAL_LONG(*retval, (p->data) ? MYSQLI_STORE_RESULT : MYSQLI_USE_RESULT);
196
/* {{{ property result_lengths_read */
197
static int result_lengths_read(mysqli_object *obj, zval **retval TSRMLS_DC)
204
p = (MYSQL_RES *)((MYSQLI_RESOURCE *)(obj->ptr))->ptr;
206
if (!p || !p->field_count) {
214
for (i=0; i < p->field_count; i++) {
216
ZVAL_LONG(l, p->lengths[i]);
217
add_index_zval(*retval, i, l);
225
MYSQLI_MAP_PROPERTY_FUNC_LONG(result_current_field_read, mysql_field_tell, MYSQLI_GET_RESULT(), ulong);
226
MYSQLI_MAP_PROPERTY_FUNC_LONG(result_field_count_read, mysql_num_fields, MYSQLI_GET_RESULT(), ulong);
227
MYSQLI_MAP_PROPERTY_FUNC_LONG(result_num_rows_read, mysql_num_rows, MYSQLI_GET_RESULT(), my_ulonglong);
229
/* statement properties */
231
/* {{{ property stmt_id_read */
232
static int stmt_id_read(mysqli_object *obj, zval **retval TSRMLS_DC)
239
p = (MY_STMT*)((MYSQLI_RESOURCE *)(obj->ptr))->ptr;
244
ZVAL_LONG(*retval, p->stmt->stmt_id);
250
/* {{{ property stmt_affected_rows_read */
251
static int stmt_affected_rows_read(mysqli_object *obj, zval **retval TSRMLS_DC)
259
stmt = (MY_STMT *)((MYSQLI_RESOURCE *)(obj->ptr))->ptr;
260
rc = mysql_stmt_affected_rows(stmt->stmt);
262
if (rc == (my_ulonglong)-1) {
263
ZVAL_LONG(*retval, -1);
268
ZVAL_LONG(*retval, rc);
271
sprintf(ret, "%llu", (my_ulonglong) rc);
272
ZVAL_STRING(*retval, ret, 1);
279
MYSQLI_MAP_PROPERTY_FUNC_LONG(stmt_insert_id_read, mysql_stmt_insert_id, MYSQLI_GET_STMT(), my_ulonglong);
280
MYSQLI_MAP_PROPERTY_FUNC_LONG(stmt_num_rows_read, mysql_stmt_num_rows, MYSQLI_GET_STMT(), my_ulonglong);
281
MYSQLI_MAP_PROPERTY_FUNC_LONG(stmt_param_count_read, mysql_stmt_param_count, MYSQLI_GET_STMT(), ulong);
282
MYSQLI_MAP_PROPERTY_FUNC_LONG(stmt_field_count_read, mysql_stmt_field_count, MYSQLI_GET_STMT(), ulong);
283
MYSQLI_MAP_PROPERTY_FUNC_LONG(stmt_errno_read, mysql_stmt_errno, MYSQLI_GET_STMT(), ulong);
284
MYSQLI_MAP_PROPERTY_FUNC_STRING(stmt_error_read, mysql_stmt_error, MYSQLI_GET_STMT());
285
MYSQLI_MAP_PROPERTY_FUNC_STRING(stmt_sqlstate_read, mysql_stmt_sqlstate, MYSQLI_GET_STMT());
287
mysqli_property_entry mysqli_link_property_entries[] = {
288
{"affected_rows", link_affected_rows_read, NULL},
289
{"client_info", link_client_info_read, NULL},
290
{"client_version", link_client_version_read, NULL},
291
{"connect_errno", link_connect_errno_read, NULL},
292
{"connect_error", link_connect_error_read, NULL},
293
{"errno", link_errno_read, NULL},
294
{"error", link_error_read, NULL},
295
{"field_count", link_field_count_read, NULL},
296
{"host_info", link_host_info_read, NULL},
297
{"info", link_info_read, NULL},
298
{"insert_id", link_insert_id_read, NULL},
299
{"server_info", link_server_info_read, NULL},
300
{"server_version", link_server_version_read, NULL},
301
{"sqlstate", link_sqlstate_read, NULL},
302
{"protocol_version", link_protocol_version_read, NULL},
303
{"thread_id", link_thread_id_read, NULL},
304
{"warning_count", link_warning_count_read, NULL},
308
mysqli_property_entry mysqli_result_property_entries[] = {
309
{"current_field", result_current_field_read, NULL},
310
{"field_count", result_field_count_read, NULL},
311
{"lengths", result_lengths_read, NULL},
312
{"num_rows", result_num_rows_read, NULL},
313
{"type", result_type_read, NULL},
317
mysqli_property_entry mysqli_stmt_property_entries[] = {
318
{"affected_rows", stmt_affected_rows_read, NULL},
319
{"insert_id", stmt_insert_id_read, NULL},
320
{"num_rows", stmt_num_rows_read, NULL},
321
{"param_count", stmt_param_count_read, NULL},
322
{"field_count", stmt_field_count_read, NULL},
323
{"errno", stmt_errno_read, NULL},
324
{"error", stmt_error_read, NULL},
325
{"sqlstate", stmt_sqlstate_read, NULL},
326
{"id", stmt_id_read, NULL},
335
* vim600: noet sw=4 ts=4 fdm=marker
336
* vim<600: noet sw=4 ts=4