From: Georg Richter Date: Fri, 13 May 2005 13:53:08 +0000 (+0000) Subject: MFH: X-Git-Tag: php-5.0.5RC1~289 X-Git-Url: https://granicus.if.org/sourcecode?a=commitdiff_plain;h=146a948d37ad36196ea64b0f73303c0879843048;p=php MFH: fixed windows compilation bug renamed mysqli_set_character_set_name to mysqli_set_charset --- diff --git a/NEWS b/NEWS index 18346a36d3..e75cfe00d9 100644 --- a/NEWS +++ b/NEWS @@ -2,7 +2,7 @@ PHP NEWS ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||| ?? ??? 2005, PHP 5.0.5 - Removed php_check_syntax() function which never worked properly. (Ilia) -- Added new function mysqli_set_character_set_name (Georg) +- Added new function mysqli_set_charset (Georg) - Added man pages for "phpize" and "php-config" scripts. (Jakub Vrana) - Added support for .cc files in extensions. (Brian) - Added PHP_INT_MAX and PHP_INT_SIZE as predefined constants. (Andrey) diff --git a/ext/mysqli/mysqli_fe.c b/ext/mysqli/mysqli_fe.c index 276e585655..b9d3470c51 100644 --- a/ext/mysqli/mysqli_fe.c +++ b/ext/mysqli/mysqli_fe.c @@ -118,7 +118,7 @@ function_entry mysqli_functions[] = { PHP_FE(mysqli_rpl_query_type, NULL) PHP_FE(mysqli_select_db, NULL) #ifdef HAVE_MYSQLI_SET_CHARSET - PHP_FE(mysqli_set_character_set_name, NULL) + PHP_FE(mysqli_set_charset, NULL) #endif PHP_FE(mysqli_stmt_attr_get, NULL) PHP_FE(mysqli_stmt_attr_set, NULL) @@ -222,8 +222,7 @@ function_entry mysqli_link_methods[] = { PHP_FALIAS(rpl_query_type,mysqli_rpl_query_type,NULL) PHP_FALIAS(select_db,mysqli_select_db,NULL) #ifdef HAVE_MYSQLI_SET_CHARSET - PHP_FALIAS(set_character_set_name,mysqli_set_character_set_name,NULL) - PHP_FALIAS(set_client_encoding,mysqli_set_character_set_name,NULL) + PHP_FALIAS(set_charset,mysqli_set_charset,NULL) #endif PHP_FALIAS(set_opt, mysqli_options,NULL) PHP_FALIAS(slave_query,mysqli_slave_query,NULL) diff --git a/ext/mysqli/mysqli_nonapi.c b/ext/mysqli/mysqli_nonapi.c index 45b88430f5..44fc56de8b 100644 --- a/ext/mysqli/mysqli_nonapi.c +++ b/ext/mysqli/mysqli_nonapi.c @@ -29,8 +29,6 @@ #include "ext/standard/info.h" #include "php_mysqli.h" -extern const char *charsets_dir; - /* {{{ proto object mysqli_connect([string hostname [,string username [,string passwd [,string dbname [,int port [,string socket]]]]]]) Open a connection to a mysql server */ PHP_FUNCTION(mysqli_connect) @@ -298,12 +296,10 @@ PHP_FUNCTION(mysqli_query) /* }}} */ #ifdef HAVE_MYSQLI_SET_CHARSET -/* {{{ proto bool mysqli_set_character_set_name(object link, string csname) +/* {{{ proto bool mysqli_set_charset(object link, string csname) sets client character set */ -PHP_FUNCTION(mysqli_set_character_set_name) +PHP_FUNCTION(mysqli_set_charset) { - struct charset_info_st *cs; - const char *save_csdir = charsets_dir; MY_MYSQL *mysql; zval *mysql_link; char *cs_name = NULL; @@ -314,30 +310,11 @@ PHP_FUNCTION(mysqli_set_character_set_name) } MYSQLI_FETCH_RESOURCE(mysql, MY_MYSQL*, &mysql_link, "mysqli_link"); - if (mysql->mysql->options.charset_dir){ - charsets_dir = mysql->mysql->options.charset_dir; - } - - cs = get_charset_by_csname(cs_name, 1, MYF(0)); - - if (cs) { - char buff[MY_CS_NAME_SIZE + 10]; - charsets_dir = save_csdir; - sprintf(buff, "SET NAMES %s", cs_name); - if (!mysql_query(mysql->mysql, buff)) { - mysql->mysql->charset = cs; - RETURN_TRUE; - } - } else { - char cs_dir_name[FN_REFLEN]; - get_charsets_dir(cs_dir_name); - mysql->mysql->net.last_errno=CR_CANT_READ_CHARSET; - strcpy(mysql->mysql->net.sqlstate, "HY000"); - sprintf(mysql->mysql->net.last_error, "Can't initialize character set %-.32s (path: %-.100s)", - cs_name, cs_dir_name); + if (mysql_set_character_set(mysql->mysql, cs_name)) + { + RETURN_FALSE; } - charsets_dir = save_csdir; - RETURN_FALSE; + RETURN_TRUE; } /* }}} */ #endif diff --git a/ext/mysqli/php_mysqli.h b/ext/mysqli/php_mysqli.h index 45abd0d6da..4bbfd36561 100644 --- a/ext/mysqli/php_mysqli.h +++ b/ext/mysqli/php_mysqli.h @@ -25,9 +25,6 @@ #undef LIST #endif -#include -#include -#include #include #include @@ -94,16 +91,14 @@ typedef struct { #ifdef PHP_WIN32 #define PHP_MYSQLI_API __declspec(dllexport) -#if MYSQL_VERSION_ID > 50005 -#define HAVE_MYSQLI_SET_CHARSET -#elif MYSQL_VERSION_ID > 40110 && MYSQL_VERSION_ID < 50000 -#define HAVE_MYSQLI_SET_CHARSET -#endif #else -#define HAVE_MYSQLI_SET_CHARSET #define PHP_MYSQLI_API #endif +#if MYSQL_VERSION_ID > 40112 && MYSQL_VERSION_ID < 50000 +#define HAVE_MYSQLI_SET_CHARSET +#endif + #ifdef ZTS #include "TSRM.h" #endif @@ -283,7 +278,7 @@ PHP_FUNCTION(mysqli_autocommit); PHP_FUNCTION(mysqli_change_user); PHP_FUNCTION(mysqli_character_set_name); #ifdef HAVE_MYSQLI_SET_CHARSET -PHP_FUNCTION(mysqli_set_character_set_name); +PHP_FUNCTION(mysqli_set_charset); #endif PHP_FUNCTION(mysqli_close); PHP_FUNCTION(mysqli_commit); diff --git a/ext/mysqli/tests/065.phpt b/ext/mysqli/tests/065.phpt index 1645e9f818..950a10a437 100644 --- a/ext/mysqli/tests/065.phpt +++ b/ext/mysqli/tests/065.phpt @@ -10,10 +10,28 @@ require_once('skipif.inc'); $mysql = new mysqli($host, $user, $passwd); - if ($mysql->set_client_encoding("utf8")) { - var_dump($mysql->client_encoding()); + $esc_str = chr(0xbf) . chr(0x5c); + + if ($mysql->set_charset("latin1")) { + /* 5C should be escaped */ + $len[0] = strlen($mysql->real_escape_string($esc_str)); + $charset[0] = $mysql->client_encoding(); + } + + if ($mysql->set_charset("gbk")) { + /* nothing should be escaped, it's a valid gbk character */ + $len[1] = strlen($mysql->real_escape_string($esc_str)); + $charset[1] = $mysql->client_encoding(); } + $mysql->close(); + var_dump($len[0]); + var_dump($len[1]); + var_dump($charset[0]); + var_dump($charset[1]); ?> --EXPECT-- -string(4) "utf8" +int(3) +int(2) +string(6) "latin1" +string(3) "gbk"