summaryrefslogtreecommitdiff
path: root/ext/mysqli/php_mysqli.h
diff options
context:
space:
mode:
authorGeorg Richter <georg@php.net>2006-03-24 09:32:24 +0000
committerGeorg Richter <georg@php.net>2006-03-24 09:32:24 +0000
commitb3a437fcc4861d5c1139b73cff00319daecee908 (patch)
tree2f1bffe30f4283a46eb1c25bc0880b85da19786c /ext/mysqli/php_mysqli.h
parent9e26f6c21392ecbf0989f04c71cfa492317a7589 (diff)
downloadphp-git-b3a437fcc4861d5c1139b73cff00319daecee908.tar.gz
Fix for bug #36802 (server crashes with invalid/not opened connections)
Added status to mysqli_resource: MYSQLI_STATUS_UNKNOWN MYSQLI_STATUS_CLEARED (for future use) MYSQLI_STATUS_INITIALIZED (after mysqli_init and mysqli_stmt_init) MYSQLI_STATUS_VALID (for valid objects) removed valid flag changed MYSQLI_FETCH_RESOURCE added last parameter __check which specifies the status
Diffstat (limited to 'ext/mysqli/php_mysqli.h')
-rw-r--r--ext/mysqli/php_mysqli.h59
1 files changed, 33 insertions, 26 deletions
diff --git a/ext/mysqli/php_mysqli.h b/ext/mysqli/php_mysqli.h
index 82a0b3bb2b..79225b5cc7 100644
--- a/ext/mysqli/php_mysqli.h
+++ b/ext/mysqli/php_mysqli.h
@@ -36,12 +36,20 @@
#define HAVE_MYSQLI_SET_CHARSET
#endif
+
#include <errmsg.h>
#ifndef PHP_MYSQLI_H
#define PHP_MYSQLI_H
-#define MYSQLI_VERSION_ID 101008
+#define MYSQLI_VERSION_ID 101009
+
+enum mysqli_status {
+ MYSQLI_STATUS_UNKNOWN=0,
+ MYSQLI_STATUS_CLEARED,
+ MYSQLI_STATUS_INITIALIZED,
+ MYSQLI_STATUS_VALID
+};
typedef struct {
ulong buflen;
@@ -57,17 +65,17 @@ typedef struct {
} BIND_BUFFER;
typedef struct {
- MYSQL_STMT *stmt;
- BIND_BUFFER param;
- BIND_BUFFER result;
- char *query;
+ MYSQL_STMT *stmt;
+ BIND_BUFFER param;
+ BIND_BUFFER result;
+ char *query;
} MY_STMT;
typedef struct {
- MYSQL *mysql;
- zval *li_read;
- php_stream *li_stream;
- unsigned int multi_query;
+ MYSQL *mysql;
+ zval *li_read;
+ php_stream *li_stream;
+ unsigned int multi_query;
} MY_MYSQL;
typedef struct {
@@ -77,15 +85,15 @@ typedef struct {
} PROFILER;
typedef struct {
- void *ptr; /* resource: (mysql, result, stmt) */
- void *info; /* additional buffer */
+ void *ptr; /* resource: (mysql, result, stmt) */
+ void *info; /* additional buffer */
+ enum mysqli_status status;
} MYSQLI_RESOURCE;
typedef struct _mysqli_object {
- zend_object zo;
- void *ptr;
- char valid;
- HashTable *prop_handler;
+ zend_object zo;
+ void *ptr;
+ HashTable *prop_handler;
} mysqli_object; /* extends zend_object */
typedef struct {
@@ -181,7 +189,6 @@ PHP_MYSQLI_EXPORT(zend_object_value) mysqli_objects_new(zend_class_entry * TSRML
#define MYSQLI_REGISTER_RESOURCE_EX(__ptr, __zval, __ce) \
((mysqli_object *) zend_object_store_get_object(__zval TSRMLS_CC))->ptr = __ptr; \
- ((mysqli_object *) zend_object_store_get_object(__zval TSRMLS_CC))->valid = 1;
#define MYSQLI_RETURN_RESOURCE(__ptr, __ce) \
Z_TYPE_P(return_value) = IS_OBJECT; \
@@ -199,7 +206,7 @@ PHP_MYSQLI_EXPORT(zend_object_value) mysqli_objects_new(zend_class_entry * TSRML
MYSQLI_REGISTER_RESOURCE_EX(__ptr, object, __ce)\
}
-#define MYSQLI_FETCH_RESOURCE(__ptr, __type, __id, __name) \
+#define MYSQLI_FETCH_RESOURCE(__ptr, __type, __id, __name, __check) \
{ \
MYSQLI_RESOURCE *my_res; \
mysqli_object *intern = (mysqli_object *)zend_object_store_get_object(*(__id) TSRMLS_CC);\
@@ -207,19 +214,19 @@ PHP_MYSQLI_EXPORT(zend_object_value) mysqli_objects_new(zend_class_entry * TSRML
php_error_docref(NULL TSRMLS_CC, E_WARNING, "Couldn't fetch %s", intern->zo.ce->name);\
RETURN_NULL();\
}\
- if (!intern->valid) { \
- php_error_docref(NULL TSRMLS_CC, E_WARNING, "invalid resource %s", intern->zo.ce->name); \
- RETURN_NULL(); \
- } \
__ptr = (__type)my_res->ptr; \
- if (!strcmp((char *)__name, "mysqli_stmt")) {\
- if (!((MY_STMT *)__ptr)->stmt->mysql) {\
- php_error_docref(NULL TSRMLS_CC, E_WARNING, "Statement isn't valid anymore");\
- RETURN_NULL();\
- }\
+ if (__check && my_res->status < __check) { \
+ php_error_docref(NULL TSRMLS_CC, E_WARNING, "invalid object or resource %s\n", intern->zo.ce->name); \
+ RETURN_NULL();\
}\
}
+#define MYSQLI_SET_STATUS(__id, __value) \
+{ \
+ mysqli_object *intern = (mysqli_object *)zend_object_store_get_object(*(__id) TSRMLS_CC);\
+ ((MYSQLI_RESOURCE *)intern->ptr)->status = __value; \
+} \
+
#define MYSQLI_CLEAR_RESOURCE(__id) \
{ \
mysqli_object *intern = (mysqli_object *)zend_object_store_get_object(*(__id) TSRMLS_CC);\