mirror of
https://github.com/php/php-src.git
synced 2025-08-15 21:48:51 +02:00
Fix #78666 mysqli_options generates Warning on var_dump()
Closes GH-5121
This commit is contained in:
parent
9fcaf25c93
commit
d39edebbce
10 changed files with 138 additions and 157 deletions
3
NEWS
3
NEWS
|
@ -26,6 +26,9 @@ PHP NEWS
|
|||
. Fixed bug #79149 (SEGV in mb_convert_encoding with non-string encodings).
|
||||
(cmb)
|
||||
|
||||
- MySQLi:
|
||||
. Fixed bug #78666 (Properties may emit a warning on var_dump()). (kocsismate)
|
||||
|
||||
- MySQLnd:
|
||||
. Fixed bug #79084 (mysqlnd may fetch wrong column indexes with MYSQLI_BOTH).
|
||||
(cmb)
|
||||
|
|
|
@ -69,7 +69,7 @@ zend_class_entry *mysqli_warning_class_entry;
|
|||
zend_class_entry *mysqli_exception_class_entry;
|
||||
|
||||
|
||||
typedef zval *(*mysqli_read_t)(mysqli_object *obj, zval *rv);
|
||||
typedef int (*mysqli_read_t)(mysqli_object *obj, zval *rv, zend_bool quiet);
|
||||
typedef int (*mysqli_write_t)(mysqli_object *obj, zval *newval);
|
||||
|
||||
typedef struct _mysqli_prop_handler {
|
||||
|
@ -281,10 +281,13 @@ static void mysqli_warning_free_storage(zend_object *object)
|
|||
/* }}} */
|
||||
|
||||
/* {{{ mysqli_read_na */
|
||||
static zval *mysqli_read_na(mysqli_object *obj, zval *retval)
|
||||
static int mysqli_read_na(mysqli_object *obj, zval *retval, zend_bool quiet)
|
||||
{
|
||||
zend_throw_error(NULL, "Cannot read property");
|
||||
return NULL;
|
||||
if (!quiet) {
|
||||
zend_throw_error(NULL, "Cannot read property");
|
||||
}
|
||||
|
||||
return FAILURE;
|
||||
}
|
||||
/* }}} */
|
||||
|
||||
|
@ -292,6 +295,7 @@ static zval *mysqli_read_na(mysqli_object *obj, zval *retval)
|
|||
static int mysqli_write_na(mysqli_object *obj, zval *newval)
|
||||
{
|
||||
zend_throw_error(NULL, "Cannot write property");
|
||||
|
||||
return FAILURE;
|
||||
}
|
||||
/* }}} */
|
||||
|
@ -320,8 +324,9 @@ zval *mysqli_read_property(zval *object, zval *member, int type, void **cache_sl
|
|||
}
|
||||
|
||||
if (hnd) {
|
||||
retval = hnd->read_func(obj, rv);
|
||||
if (retval == NULL) {
|
||||
if (hnd->read_func(obj, rv, type == BP_VAR_IS) == SUCCESS || type != BP_VAR_IS) {
|
||||
retval = rv;
|
||||
} else {
|
||||
retval = &EG(uninitialized_zval);
|
||||
}
|
||||
} else {
|
||||
|
@ -435,6 +440,7 @@ HashTable *mysqli_object_get_debug_info(zval *object, int *is_temp)
|
|||
zval rv, member;
|
||||
zval *value;
|
||||
ZVAL_STR(&member, entry->name);
|
||||
|
||||
value = mysqli_read_property(object, &member, BP_VAR_IS, 0, &rv);
|
||||
if (value != &EG(uninitialized_zval)) {
|
||||
zend_hash_add(retval, Z_STR(member), value);
|
||||
|
|
|
@ -30,10 +30,10 @@
|
|||
#include "mysqli_fe.h"
|
||||
|
||||
#define MAP_PROPERTY_MYG_BOOL_READ(name, value) \
|
||||
static zval *name(mysqli_object *obj, zval *retval) \
|
||||
static int name(mysqli_object *obj, zval *retval, zend_bool quiet) \
|
||||
{ \
|
||||
ZVAL_BOOL(retval, MyG(value)); \
|
||||
return retval; \
|
||||
return SUCCESS; \
|
||||
} \
|
||||
|
||||
#define MAP_PROPERTY_MYG_BOOL_WRITE(name, value) \
|
||||
|
@ -44,10 +44,10 @@ static int name(mysqli_object *obj, zval *value) \
|
|||
} \
|
||||
|
||||
#define MAP_PROPERTY_MYG_LONG_READ(name, value) \
|
||||
static zval *name(mysqli_object *obj, zval *retval) \
|
||||
static int name(mysqli_object *obj, zval *retval, zend_bool quiet) \
|
||||
{ \
|
||||
ZVAL_LONG(retval, MyG(value)); \
|
||||
return retval; \
|
||||
return SUCCESS; \
|
||||
} \
|
||||
|
||||
#define MAP_PROPERTY_MYG_LONG_WRITE(name, value) \
|
||||
|
@ -58,10 +58,10 @@ static int name(mysqli_object *obj, zval *value) \
|
|||
} \
|
||||
|
||||
#define MAP_PROPERTY_MYG_STRING_READ(name, value) \
|
||||
static zval *name(mysqli_object *obj, zval *retval) \
|
||||
static int name(mysqli_object *obj, zval *retval, zend_bool quiet) \
|
||||
{ \
|
||||
ZVAL_STRING(retval, MyG(value)); \
|
||||
return retval; \
|
||||
return SUCCESS; \
|
||||
} \
|
||||
|
||||
#define MAP_PROPERTY_MYG_STRING_WRITE(name, value) \
|
||||
|
@ -82,34 +82,38 @@ static int driver_report_write(mysqli_object *obj, zval *value)
|
|||
/* }}} */
|
||||
|
||||
/* {{{ property driver_embedded_read */
|
||||
static zval *driver_embedded_read(mysqli_object *obj, zval *retval)
|
||||
static int driver_embedded_read(mysqli_object *obj, zval *retval, zend_bool quiet)
|
||||
{
|
||||
ZVAL_FALSE(retval);
|
||||
return retval;
|
||||
|
||||
return SUCCESS;
|
||||
}
|
||||
/* }}} */
|
||||
|
||||
/* {{{ property driver_client_version_read */
|
||||
static zval *driver_client_version_read(mysqli_object *obj, zval *retval)
|
||||
static int driver_client_version_read(mysqli_object *obj, zval *retval, zend_bool quiet)
|
||||
{
|
||||
ZVAL_LONG(retval, MYSQL_VERSION_ID);
|
||||
return retval;
|
||||
|
||||
return SUCCESS;
|
||||
}
|
||||
/* }}} */
|
||||
|
||||
/* {{{ property driver_client_info_read */
|
||||
static zval *driver_client_info_read(mysqli_object *obj, zval *retval)
|
||||
static int driver_client_info_read(mysqli_object *obj, zval *retval, zend_bool quiet)
|
||||
{
|
||||
ZVAL_STRING(retval, (char *)mysql_get_client_info());
|
||||
return retval;
|
||||
|
||||
return SUCCESS;
|
||||
}
|
||||
/* }}} */
|
||||
|
||||
/* {{{ property driver_driver_version_read */
|
||||
static zval *driver_driver_version_read(mysqli_object *obj, zval *retval)
|
||||
static int driver_driver_version_read(mysqli_object *obj, zval *retval, zend_bool quiet)
|
||||
{
|
||||
ZVAL_LONG(retval, MYSQLI_VERSION_ID);
|
||||
return retval;
|
||||
|
||||
return SUCCESS;
|
||||
}
|
||||
/* }}} */
|
||||
|
||||
|
|
|
@ -29,49 +29,56 @@
|
|||
#include "php_mysqli_structs.h"
|
||||
#include "mysqli_priv.h"
|
||||
|
||||
#define CHECK_STATUS(value) \
|
||||
#define CHECK_STATUS(value, quiet) \
|
||||
if (!obj->ptr || ((MYSQLI_RESOURCE *)obj->ptr)->status < value ) { \
|
||||
php_error_docref(NULL, E_WARNING, "Property access is not allowed yet"); \
|
||||
if (!quiet) { \
|
||||
php_error_docref(NULL, E_WARNING, "Property access is not allowed yet"); \
|
||||
} \
|
||||
ZVAL_FALSE(retval); \
|
||||
return retval; \
|
||||
return FAILURE; \
|
||||
} \
|
||||
|
||||
#define MYSQLI_GET_MYSQL(statusval) \
|
||||
MYSQL *p; \
|
||||
if (!obj->ptr || !(MY_MYSQL *)((MYSQLI_RESOURCE *)(obj->ptr))->ptr) { \
|
||||
php_error_docref(NULL, E_WARNING, "Couldn't fetch %s", ZSTR_VAL(obj->zo.ce->name));\
|
||||
if (!quiet) { \
|
||||
php_error_docref(NULL, E_WARNING, "Couldn't fetch %s", ZSTR_VAL(obj->zo.ce->name)); \
|
||||
} \
|
||||
ZVAL_FALSE(retval);\
|
||||
return retval; \
|
||||
return FAILURE; \
|
||||
} else { \
|
||||
CHECK_STATUS(statusval);\
|
||||
CHECK_STATUS(statusval, quiet);\
|
||||
p = (MYSQL *)((MY_MYSQL *)((MYSQLI_RESOURCE *)(obj->ptr))->ptr)->mysql;\
|
||||
}
|
||||
|
||||
#define MYSQLI_GET_RESULT(statusval) \
|
||||
MYSQL_RES *p; \
|
||||
if (!obj->ptr) { \
|
||||
php_error_docref(NULL, E_WARNING, "Couldn't fetch %s", ZSTR_VAL(obj->zo.ce->name));\
|
||||
if (!quiet) { \
|
||||
php_error_docref(NULL, E_WARNING, "Couldn't fetch %s", ZSTR_VAL(obj->zo.ce->name)); \
|
||||
} \
|
||||
ZVAL_NULL(retval);\
|
||||
return retval; \
|
||||
return FAILURE; \
|
||||
} else { \
|
||||
CHECK_STATUS(statusval);\
|
||||
CHECK_STATUS(statusval, quiet);\
|
||||
p = (MYSQL_RES *)((MYSQLI_RESOURCE *)(obj->ptr))->ptr; \
|
||||
}
|
||||
|
||||
|
||||
#define MYSQLI_GET_STMT(statusval) \
|
||||
MYSQL_STMT *p; \
|
||||
if (!obj->ptr) { \
|
||||
php_error_docref(NULL, E_WARNING, "Couldn't fetch %s", ZSTR_VAL(obj->zo.ce->name));\
|
||||
if (!quiet) { \
|
||||
php_error_docref(NULL, E_WARNING, "Couldn't fetch %s", ZSTR_VAL(obj->zo.ce->name)); \
|
||||
} \
|
||||
ZVAL_NULL(retval);\
|
||||
return retval; \
|
||||
return FAILURE; \
|
||||
} else { \
|
||||
CHECK_STATUS(statusval);\
|
||||
p = (MYSQL_STMT *)((MY_STMT *)((MYSQLI_RESOURCE *)(obj->ptr))->ptr)->stmt;\
|
||||
CHECK_STATUS(statusval, quiet); \
|
||||
p = (MYSQL_STMT *)((MY_STMT *)((MYSQLI_RESOURCE *)(obj->ptr))->ptr)->stmt; \
|
||||
}
|
||||
|
||||
#define MYSQLI_MAP_PROPERTY_FUNC_LONG( __func, __int_func, __get_type, __ret_type, __ret_type_sprint_mod)\
|
||||
static zval *__func(mysqli_object *obj, zval *retval) \
|
||||
static int __func(mysqli_object *obj, zval *retval, zend_bool quiet) \
|
||||
{\
|
||||
__ret_type l;\
|
||||
__get_type;\
|
||||
|
@ -84,12 +91,12 @@ static zval *__func(mysqli_object *obj, zval *retval) \
|
|||
} else { \
|
||||
ZVAL_NEW_STR(retval, strpprintf(0, __ret_type_sprint_mod, l)); \
|
||||
} \
|
||||
}\
|
||||
return retval;\
|
||||
} \
|
||||
return SUCCESS; \
|
||||
}
|
||||
|
||||
#define MYSQLI_MAP_PROPERTY_FUNC_STRING(__func, __int_func, __get_type)\
|
||||
static zval *__func(mysqli_object *obj, zval *retval)\
|
||||
static int __func(mysqli_object *obj, zval *retval, zend_bool quiet)\
|
||||
{\
|
||||
char *c;\
|
||||
__get_type;\
|
||||
|
@ -103,66 +110,70 @@ static zval *__func(mysqli_object *obj, zval *retval)\
|
|||
ZVAL_STRING(retval, c);\
|
||||
}\
|
||||
}\
|
||||
return retval; \
|
||||
return SUCCESS; \
|
||||
}
|
||||
|
||||
/* {{{ property link_client_version_read */
|
||||
static zval *link_client_version_read(mysqli_object *obj, zval *retval)
|
||||
static int link_client_version_read(mysqli_object *obj, zval *retval, zend_bool quiet)
|
||||
{
|
||||
ZVAL_LONG(retval, MYSQL_VERSION_ID);
|
||||
return retval;
|
||||
|
||||
return SUCCESS;
|
||||
}
|
||||
/* }}} */
|
||||
|
||||
/* {{{ property link_client_info_read */
|
||||
static zval *link_client_info_read(mysqli_object *obj, zval *retval)
|
||||
static int link_client_info_read(mysqli_object *obj, zval *retval, zend_bool quiet)
|
||||
{
|
||||
CHECK_STATUS(MYSQLI_STATUS_INITIALIZED);
|
||||
CHECK_STATUS(MYSQLI_STATUS_INITIALIZED, quiet);
|
||||
ZVAL_STRING(retval, MYSQL_SERVER_VERSION);
|
||||
return retval;
|
||||
|
||||
return SUCCESS;
|
||||
}
|
||||
/* }}} */
|
||||
|
||||
/* {{{ property link_connect_errno_read */
|
||||
static zval *link_connect_errno_read(mysqli_object *obj, zval *retval)
|
||||
static int link_connect_errno_read(mysqli_object *obj, zval *retval, zend_bool quiet)
|
||||
{
|
||||
ZVAL_LONG(retval, (zend_long)MyG(error_no));
|
||||
return retval;
|
||||
|
||||
return SUCCESS;
|
||||
}
|
||||
/* }}} */
|
||||
|
||||
/* {{{ property link_connect_error_read */
|
||||
static zval *link_connect_error_read(mysqli_object *obj, zval *retval)
|
||||
static int link_connect_error_read(mysqli_object *obj, zval *retval, zend_bool quiet)
|
||||
{
|
||||
if (MyG(error_msg)) {
|
||||
ZVAL_STRING(retval, MyG(error_msg));
|
||||
} else {
|
||||
ZVAL_NULL(retval);
|
||||
}
|
||||
return retval;
|
||||
|
||||
return SUCCESS;
|
||||
}
|
||||
/* }}} */
|
||||
|
||||
/* {{{ property link_affected_rows_read */
|
||||
static zval *link_affected_rows_read(mysqli_object *obj, zval *retval)
|
||||
static int link_affected_rows_read(mysqli_object *obj, zval *retval, zend_bool quiet)
|
||||
{
|
||||
MY_MYSQL *mysql;
|
||||
my_ulonglong rc;
|
||||
|
||||
CHECK_STATUS(MYSQLI_STATUS_INITIALIZED);
|
||||
CHECK_STATUS(MYSQLI_STATUS_INITIALIZED, quiet);
|
||||
|
||||
mysql = (MY_MYSQL *)((MYSQLI_RESOURCE *)(obj->ptr))->ptr;
|
||||
|
||||
if (!mysql) {
|
||||
ZVAL_NULL(retval);
|
||||
} else {
|
||||
CHECK_STATUS(MYSQLI_STATUS_VALID);
|
||||
CHECK_STATUS(MYSQLI_STATUS_VALID, quiet);
|
||||
|
||||
rc = mysql_affected_rows(mysql->mysql);
|
||||
|
||||
if (rc == (my_ulonglong) -1) {
|
||||
ZVAL_LONG(retval, -1);
|
||||
return retval;
|
||||
return SUCCESS;
|
||||
}
|
||||
|
||||
if (rc < ZEND_LONG_MAX) {
|
||||
|
@ -171,16 +182,17 @@ static zval *link_affected_rows_read(mysqli_object *obj, zval *retval)
|
|||
ZVAL_NEW_STR(retval, strpprintf(0, MYSQLI_LLU_SPEC, rc));
|
||||
}
|
||||
}
|
||||
return retval;
|
||||
|
||||
return SUCCESS;
|
||||
}
|
||||
/* }}} */
|
||||
|
||||
/* {{{ property link_error_list_read */
|
||||
static zval *link_error_list_read(mysqli_object *obj, zval *retval)
|
||||
static int link_error_list_read(mysqli_object *obj, zval *retval, zend_bool quiet)
|
||||
{
|
||||
MY_MYSQL *mysql;
|
||||
|
||||
CHECK_STATUS(MYSQLI_STATUS_VALID);
|
||||
CHECK_STATUS(MYSQLI_STATUS_VALID, quiet);
|
||||
|
||||
mysql = (MY_MYSQL *)((MYSQLI_RESOURCE *)(obj->ptr))->ptr;
|
||||
|
||||
|
@ -216,7 +228,7 @@ static zval *link_error_list_read(mysqli_object *obj, zval *retval)
|
|||
ZVAL_EMPTY_ARRAY(retval);
|
||||
}
|
||||
|
||||
return retval;
|
||||
return SUCCESS;
|
||||
}
|
||||
/* }}} */
|
||||
|
||||
|
@ -237,11 +249,11 @@ MYSQLI_MAP_PROPERTY_FUNC_LONG(link_warning_count_read, mysql_warning_count, MYSQ
|
|||
/* result properties */
|
||||
|
||||
/* {{{ property result_type_read */
|
||||
static zval *result_type_read(mysqli_object *obj, zval *retval)
|
||||
static int result_type_read(mysqli_object *obj, zval *retval, zend_bool quiet)
|
||||
{
|
||||
MYSQL_RES *p;
|
||||
|
||||
CHECK_STATUS(MYSQLI_STATUS_VALID);
|
||||
CHECK_STATUS(MYSQLI_STATUS_VALID, quiet);
|
||||
p = (MYSQL_RES *)((MYSQLI_RESOURCE *)(obj->ptr))->ptr;
|
||||
|
||||
if (!p) {
|
||||
|
@ -249,12 +261,13 @@ static zval *result_type_read(mysqli_object *obj, zval *retval)
|
|||
} else {
|
||||
ZVAL_LONG(retval, mysqli_result_is_unbuffered(p) ? MYSQLI_USE_RESULT:MYSQLI_STORE_RESULT);
|
||||
}
|
||||
return retval;
|
||||
|
||||
return SUCCESS;
|
||||
}
|
||||
/* }}} */
|
||||
|
||||
/* {{{ property result_lengths_read */
|
||||
static zval *result_lengths_read(mysqli_object *obj, zval *retval)
|
||||
static int result_lengths_read(mysqli_object *obj, zval *retval, zend_bool quiet)
|
||||
{
|
||||
MYSQL_RES *p;
|
||||
#if defined(MYSQLI_USE_MYSQLND)
|
||||
|
@ -264,7 +277,7 @@ static zval *result_lengths_read(mysqli_object *obj, zval *retval)
|
|||
#endif
|
||||
uint32_t field_count;
|
||||
|
||||
CHECK_STATUS(MYSQLI_STATUS_VALID);
|
||||
CHECK_STATUS(MYSQLI_STATUS_VALID, quiet);
|
||||
p = (MYSQL_RES *)((MYSQLI_RESOURCE *)(obj->ptr))->ptr;
|
||||
field_count = mysql_num_fields(p);
|
||||
if (!p || !field_count || !(ret = mysql_fetch_lengths(p))) {
|
||||
|
@ -278,7 +291,8 @@ static zval *result_lengths_read(mysqli_object *obj, zval *retval)
|
|||
add_index_long(retval, i, ret[i]);
|
||||
}
|
||||
}
|
||||
return retval;
|
||||
|
||||
return SUCCESS;
|
||||
}
|
||||
/* }}} */
|
||||
|
||||
|
@ -289,11 +303,11 @@ MYSQLI_MAP_PROPERTY_FUNC_LONG(result_num_rows_read, mysql_num_rows, MYSQLI_GET_R
|
|||
/* statement properties */
|
||||
|
||||
/* {{{ property stmt_id_read */
|
||||
static zval *stmt_id_read(mysqli_object *obj, zval *retval)
|
||||
static int stmt_id_read(mysqli_object *obj, zval *retval, zend_bool quiet)
|
||||
{
|
||||
MY_STMT *p;
|
||||
|
||||
CHECK_STATUS(MYSQLI_STATUS_VALID);
|
||||
CHECK_STATUS(MYSQLI_STATUS_VALID, quiet);
|
||||
|
||||
p = (MY_STMT*)((MYSQLI_RESOURCE *)(obj->ptr))->ptr;
|
||||
|
||||
|
@ -302,17 +316,18 @@ static zval *stmt_id_read(mysqli_object *obj, zval *retval)
|
|||
} else {
|
||||
ZVAL_LONG(retval, mysqli_stmt_get_id(p->stmt));
|
||||
}
|
||||
return retval;
|
||||
|
||||
return SUCCESS;
|
||||
}
|
||||
/* }}} */
|
||||
|
||||
/* {{{ property stmt_affected_rows_read */
|
||||
static zval *stmt_affected_rows_read(mysqli_object *obj, zval *retval)
|
||||
static int stmt_affected_rows_read(mysqli_object *obj, zval *retval, zend_bool quiet)
|
||||
{
|
||||
MY_STMT *p;
|
||||
my_ulonglong rc;
|
||||
|
||||
CHECK_STATUS(MYSQLI_STATUS_VALID);
|
||||
CHECK_STATUS(MYSQLI_STATUS_VALID, quiet);
|
||||
|
||||
p = (MY_STMT *)((MYSQLI_RESOURCE *)(obj->ptr))->ptr;
|
||||
|
||||
|
@ -323,7 +338,7 @@ static zval *stmt_affected_rows_read(mysqli_object *obj, zval *retval)
|
|||
|
||||
if (rc == (my_ulonglong) -1) {
|
||||
ZVAL_LONG(retval, -1);
|
||||
return retval;
|
||||
return SUCCESS;
|
||||
}
|
||||
|
||||
if (rc < ZEND_LONG_MAX) {
|
||||
|
@ -332,16 +347,17 @@ static zval *stmt_affected_rows_read(mysqli_object *obj, zval *retval)
|
|||
ZVAL_NEW_STR(retval, strpprintf(0, MYSQLI_LLU_SPEC, rc));
|
||||
}
|
||||
}
|
||||
return retval;
|
||||
|
||||
return SUCCESS;
|
||||
}
|
||||
/* }}} */
|
||||
|
||||
/* {{{ property stmt_error_list_read */
|
||||
static zval *stmt_error_list_read(mysqli_object *obj, zval *retval)
|
||||
static int stmt_error_list_read(mysqli_object *obj, zval *retval, zend_bool quiet)
|
||||
{
|
||||
MY_STMT * stmt;
|
||||
|
||||
CHECK_STATUS(MYSQLI_STATUS_INITIALIZED);
|
||||
CHECK_STATUS(MYSQLI_STATUS_INITIALIZED, quiet);
|
||||
|
||||
stmt = (MY_STMT *)((MYSQLI_RESOURCE *)(obj->ptr))->ptr;
|
||||
if (stmt && stmt->stmt) {
|
||||
|
@ -375,7 +391,8 @@ static zval *stmt_error_list_read(mysqli_object *obj, zval *retval)
|
|||
} else {
|
||||
ZVAL_EMPTY_ARRAY(retval);
|
||||
}
|
||||
return retval;
|
||||
|
||||
return SUCCESS;
|
||||
}
|
||||
/* }}} */
|
||||
|
||||
|
|
|
@ -199,49 +199,65 @@ PHP_METHOD(mysqli_warning, next)
|
|||
/* }}} */
|
||||
|
||||
/* {{{ property mysqli_warning_message */
|
||||
static
|
||||
zval *mysqli_warning_message(mysqli_object *obj, zval *retval)
|
||||
static int mysqli_warning_message(mysqli_object *obj, zval *retval, zend_bool quiet)
|
||||
{
|
||||
MYSQLI_WARNING *w;
|
||||
|
||||
if (!obj->ptr || !((MYSQLI_RESOURCE *)(obj->ptr))->ptr) {
|
||||
return NULL;
|
||||
if (!quiet) {
|
||||
php_error_docref(NULL, E_WARNING, "Couldn't fetch %s", ZSTR_VAL(obj->zo.ce->name));
|
||||
}
|
||||
ZVAL_NULL(retval);
|
||||
|
||||
return FAILURE;
|
||||
}
|
||||
|
||||
w = (MYSQLI_WARNING *)((MYSQLI_RESOURCE *)(obj->ptr))->ptr;
|
||||
ZVAL_COPY(retval, &w->reason);
|
||||
return retval;
|
||||
|
||||
return SUCCESS;
|
||||
}
|
||||
/* }}} */
|
||||
|
||||
/* {{{ property mysqli_warning_sqlstate */
|
||||
static
|
||||
zval *mysqli_warning_sqlstate(mysqli_object *obj, zval *retval)
|
||||
static int mysqli_warning_sqlstate(mysqli_object *obj, zval *retval, zend_bool quiet)
|
||||
{
|
||||
MYSQLI_WARNING *w;
|
||||
|
||||
if (!obj->ptr || !((MYSQLI_RESOURCE *)(obj->ptr))->ptr) {
|
||||
return NULL;
|
||||
if (!quiet) {
|
||||
php_error_docref(NULL, E_WARNING, "Couldn't fetch %s", ZSTR_VAL(obj->zo.ce->name));
|
||||
}
|
||||
ZVAL_NULL(retval);
|
||||
|
||||
return FAILURE;
|
||||
}
|
||||
|
||||
w = (MYSQLI_WARNING *)((MYSQLI_RESOURCE *)(obj->ptr))->ptr;
|
||||
ZVAL_COPY(retval, &w->sqlstate);
|
||||
return retval;
|
||||
|
||||
return SUCCESS;
|
||||
}
|
||||
/* }}} */
|
||||
|
||||
/* {{{ property mysqli_warning_error */
|
||||
static
|
||||
zval *mysqli_warning_errno(mysqli_object *obj, zval *retval)
|
||||
static int mysqli_warning_errno(mysqli_object *obj, zval *retval, zend_bool quiet)
|
||||
{
|
||||
MYSQLI_WARNING *w;
|
||||
|
||||
if (!obj->ptr || !((MYSQLI_RESOURCE *)(obj->ptr))->ptr) {
|
||||
return NULL;
|
||||
if (!quiet) {
|
||||
php_error_docref(NULL, E_WARNING, "Couldn't fetch %s", ZSTR_VAL(obj->zo.ce->name));
|
||||
}
|
||||
ZVAL_NULL(retval);
|
||||
|
||||
return FAILURE;
|
||||
}
|
||||
|
||||
w = (MYSQLI_WARNING *)((MYSQLI_RESOURCE *)(obj->ptr))->ptr;
|
||||
ZVAL_LONG(retval, w->errorno);
|
||||
return retval;
|
||||
|
||||
return SUCCESS;
|
||||
}
|
||||
/* }}} */
|
||||
|
||||
|
|
|
@ -158,7 +158,7 @@ struct st_mysqli_warning {
|
|||
typedef struct _mysqli_property_entry {
|
||||
const char *pname;
|
||||
size_t pname_length;
|
||||
zval *(*r_func)(mysqli_object *obj, zval *retval);
|
||||
int (*r_func)(mysqli_object *obj, zval *retval, zend_bool quiet);
|
||||
int (*w_func)(mysqli_object *obj, zval *value);
|
||||
} mysqli_property_entry;
|
||||
|
||||
|
|
|
@ -22,7 +22,7 @@ require_once('skipifconnectfailure.inc');
|
|||
$mysql = new my_mysql();
|
||||
|
||||
var_dump($mysql->p_test);
|
||||
@var_dump($mysql->errno);
|
||||
var_dump($mysql->errno);
|
||||
|
||||
$mysql->connect($host, $user, $passwd, $db, $port, $socket);
|
||||
$mysql->select_db("nonexistingdb");
|
||||
|
@ -38,5 +38,7 @@ array(2) {
|
|||
[1]=>
|
||||
%s(3) "bar"
|
||||
}
|
||||
|
||||
Warning: main(): Couldn't fetch my_mysql in %s on line %d
|
||||
bool(false)
|
||||
bool(true)
|
||||
|
|
|
@ -16,8 +16,7 @@ class DbConnection {
|
|||
var_dump($link);
|
||||
|
||||
$link = mysqli_init();
|
||||
/* @ is to suppress 'Property access is not allowed yet' */
|
||||
@var_dump($link);
|
||||
var_dump($link);
|
||||
|
||||
$mysql = new my_mysqli($host, $user, $passwd, $db, $port, $socket);
|
||||
$mysql->query("DROP TABLE IF EXISTS test_warnings");
|
||||
|
@ -36,8 +35,6 @@ class DbConnection {
|
|||
|
||||
if ("" == $warning->message)
|
||||
printf("[004] Message string must not be empty\n");
|
||||
|
||||
|
||||
} else {
|
||||
printf("[002] Empty error message!\n");
|
||||
var_dump($warning);
|
||||
|
@ -102,8 +99,6 @@ object(mysqli)#%d (%d) {
|
|||
int(0)
|
||||
}
|
||||
object(mysqli)#%d (%d) {
|
||||
["affected_rows"]=>
|
||||
bool(false)
|
||||
["client_info"]=>
|
||||
string(%d) "%s"
|
||||
["client_version"]=>
|
||||
|
@ -116,27 +111,5 @@ object(mysqli)#%d (%d) {
|
|||
int(0)
|
||||
["error"]=>
|
||||
string(0) ""
|
||||
["error_list"]=>
|
||||
bool(false)
|
||||
["field_count"]=>
|
||||
bool(false)
|
||||
["host_info"]=>
|
||||
bool(false)
|
||||
["info"]=>
|
||||
bool(false)
|
||||
["insert_id"]=>
|
||||
bool(false)
|
||||
["server_info"]=>
|
||||
bool(false)
|
||||
["server_version"]=>
|
||||
bool(false)
|
||||
["sqlstate"]=>
|
||||
bool(false)
|
||||
["protocol_version"]=>
|
||||
bool(false)
|
||||
["thread_id"]=>
|
||||
bool(false)
|
||||
["warning_count"]=>
|
||||
bool(false)
|
||||
}
|
||||
Done
|
||||
|
|
|
@ -138,7 +138,7 @@ mysqli.allow_local_infile=1
|
|||
}
|
||||
|
||||
mysqli_close($link);
|
||||
@var_dump($link);
|
||||
var_dump($link);
|
||||
|
||||
if ($IS_MYSQLND) {
|
||||
ini_set('mysqli.default_host', 'p:' . $host);
|
||||
|
@ -179,42 +179,12 @@ mysqli.allow_local_infile=1
|
|||
--EXPECTF--
|
||||
Warning: mysqli_real_connect(): (%s/%d): Access denied for user '%s'@'%s' (using password: YES) in %s on line %d
|
||||
object(mysqli)#%d (%d) {
|
||||
["affected_rows"]=>
|
||||
bool(false)
|
||||
["client_info"]=>
|
||||
%s
|
||||
["client_version"]=>
|
||||
int(%d)
|
||||
["connect_errno"]=>
|
||||
int(%d)
|
||||
["connect_error"]=>
|
||||
NULL
|
||||
["errno"]=>
|
||||
%s
|
||||
["error"]=>
|
||||
%s
|
||||
["error_list"]=>
|
||||
bool(false)
|
||||
["field_count"]=>
|
||||
bool(false)
|
||||
["host_info"]=>
|
||||
bool(false)
|
||||
["info"]=>
|
||||
bool(false)
|
||||
["insert_id"]=>
|
||||
bool(false)
|
||||
["server_info"]=>
|
||||
bool(false)
|
||||
["server_version"]=>
|
||||
bool(false)
|
||||
["sqlstate"]=>
|
||||
bool(false)
|
||||
["protocol_version"]=>
|
||||
bool(false)
|
||||
["thread_id"]=>
|
||||
bool(false)
|
||||
["warning_count"]=>
|
||||
bool(false)
|
||||
}
|
||||
|
||||
Warning: mysqli_real_connect(): Couldn't fetch mysqli in %s on line %d
|
||||
|
|
|
@ -59,7 +59,7 @@ require_once('skipifconnectfailure.inc');
|
|||
|
||||
$references[$idx++] = &$res;
|
||||
mysqli_free_result($res);
|
||||
@debug_zval_dump($references);
|
||||
debug_zval_dump($references);
|
||||
|
||||
if (!(mysqli_real_query($link, "SELECT id, label FROM test ORDER BY id ASC LIMIT 1")) ||
|
||||
!($res = mysqli_use_result($link)))
|
||||
|
@ -129,17 +129,7 @@ array(7) refcount(2){
|
|||
&int(4)
|
||||
}
|
||||
[6]=>
|
||||
&object(mysqli_result)#%d (5) refcount(%d){
|
||||
["current_field"]=>
|
||||
NULL
|
||||
["field_count"]=>
|
||||
NULL
|
||||
["lengths"]=>
|
||||
bool(false)
|
||||
["num_rows"]=>
|
||||
NULL
|
||||
["type"]=>
|
||||
bool(false)
|
||||
&object(mysqli_result)#%d (0) refcount(%d){
|
||||
}
|
||||
}
|
||||
array(1) refcount(2){
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue