diff options
author | Andrey Hristov <andrey@php.net> | 2008-03-18 16:57:31 +0000 |
---|---|---|
committer | Andrey Hristov <andrey@php.net> | 2008-03-18 16:57:31 +0000 |
commit | caf3e9c3f1c329b496b00501b8baef4dbfc66b4f (patch) | |
tree | 256aa613a7db94da81fb7ecbda0efaf040e23d3d /ext/mysqli/mysqli_nonapi.c | |
parent | bd9e02695154548e66ebec844c21f900f88ae7c0 (diff) | |
download | php-git-caf3e9c3f1c329b496b00501b8baef4dbfc66b4f.tar.gz |
Fixed a bunch of bugs reported in
Bug #44352 mysqli_connect_error() false negative for host errors
From now on the mysqli object doesn't have that magic properties, like
error, which were readable but not visible through isset(), property_exists()
and var_dump(). All other ext/mysqli classes were fixed too.
Now it will be easier to debug mysqli based applications.
Diffstat (limited to 'ext/mysqli/mysqli_nonapi.c')
-rw-r--r-- | ext/mysqli/mysqli_nonapi.c | 24 |
1 files changed, 18 insertions, 6 deletions
diff --git a/ext/mysqli/mysqli_nonapi.c b/ext/mysqli/mysqli_nonapi.c index b4258a429c..c44adcc778 100644 --- a/ext/mysqli/mysqli_nonapi.c +++ b/ext/mysqli/mysqli_nonapi.c @@ -33,6 +33,19 @@ #define SAFE_STR(a) ((a)?a:"") +/* {{{ php_mysqli_set_error + */ +static void php_mysqli_set_error(long mysql_errno, char *mysql_err TSRMLS_DC) +{ + MyG(error_no) = mysql_errno; + if (MyG(error_msg)) { + efree(MyG(error_msg)); + } + MyG(error_msg) = estrdup(mysql_err); +} +/* }}} */ + + void mysqli_common_connect(INTERNAL_FUNCTION_PARAMETERS, zend_bool is_real_connect, zend_bool in_ctor) { MY_MYSQL *mysql = NULL; @@ -215,7 +228,7 @@ void mysqli_common_connect(INTERNAL_FUNCTION_PARAMETERS, zend_bool is_real_conne port, socket, flags, MyG(mysqlnd_thd_zval_cache) TSRMLS_CC) == NULL) #endif { - /* Save error messages */ + /* Save error messages - for mysqli_connect_error() & mysqli_connect_errno() */ php_mysqli_set_error(mysql_errno(mysql->mysql), (char *) mysql_error(mysql->mysql) TSRMLS_CC); php_mysqli_throw_sql_exception((char *)mysql_sqlstate(mysql->mysql), mysql_errno(mysql->mysql) TSRMLS_CC, "%s", mysql_error(mysql->mysql)); @@ -547,7 +560,6 @@ PHP_FUNCTION(mysqli_query) break; #endif } - if (!result) { php_mysqli_throw_sql_exception((char *)mysql_sqlstate(mysql->mysql), mysql_errno(mysql->mysql) TSRMLS_CC, "%s", mysql_error(mysql->mysql)); @@ -641,7 +653,7 @@ PHP_FUNCTION(mysqli_stmt_get_warnings) mysqli_resource = (MYSQLI_RESOURCE *)ecalloc (1, sizeof(MYSQLI_RESOURCE)); mysqli_resource->ptr = mysqli_resource->info = (void *)w; mysqli_resource->status = MYSQLI_STATUS_VALID; - MYSQLI_RETURN_RESOURCE(mysqli_resource, mysqli_warning_class_entry); + MYSQLI_RETURN_RESOURCE(mysqli_resource, mysqli_warning_class_entry); } /* }}} */ @@ -652,10 +664,10 @@ PHP_FUNCTION(mysqli_set_charset) { MY_MYSQL *mysql; zval *mysql_link; - char *cs_name = NULL; - unsigned int len; + char *cs_name; + int csname_len; - if (zend_parse_method_parameters(ZEND_NUM_ARGS() TSRMLS_CC, getThis(), "Os", &mysql_link, mysqli_link_class_entry, &cs_name, &len) == FAILURE) { + if (zend_parse_method_parameters(ZEND_NUM_ARGS() TSRMLS_CC, getThis(), "Os", &mysql_link, mysqli_link_class_entry, &cs_name, &csname_len) == FAILURE) { return; } MYSQLI_FETCH_RESOURCE(mysql, MY_MYSQL*, &mysql_link, "mysqli_link", MYSQLI_STATUS_VALID); |