]> granicus.if.org Git - php/commitdiff
MFH:
authorGeorg Richter <georg@php.net>
Fri, 13 May 2005 13:53:08 +0000 (13:53 +0000)
committerGeorg Richter <georg@php.net>
Fri, 13 May 2005 13:53:08 +0000 (13:53 +0000)
fixed windows compilation bug
renamed mysqli_set_character_set_name to mysqli_set_charset

NEWS
ext/mysqli/mysqli_fe.c
ext/mysqli/mysqli_nonapi.c
ext/mysqli/php_mysqli.h
ext/mysqli/tests/065.phpt

diff --git a/NEWS b/NEWS
index 18346a36d333743d9545be3f14983ab73e3023e7..e75cfe00d9152c760c246466e73f3488eb50adf1 100644 (file)
--- 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)
index 276e585655ecb445955edbe1a055573db2e3874a..b9d3470c513e6bd1ff21e064ae668cb885e827d4 100644 (file)
@@ -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)
index 45b88430f54ed50e3b8803f6a62357e7a5912431..44fc56de8bd5c17ab930f30bc69e00731b4bdf4c 100644 (file)
@@ -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
index 45abd0d6dae034d046b12e1a24dbdab21d458c11..4bbfd365614237fdcceb292a3b6ebad93f7b67a3 100644 (file)
@@ -25,9 +25,6 @@
 #undef LIST
 #endif
 
-#include <my_global.h>
-#include <my_sys.h>
-#include <m_ctype.h>
 #include <mysql.h>
 #include <errmsg.h>
 
@@ -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);
index 1645e9f818e5893c398198b76cfc105c0c9738a1..950a10a437f5e37a9c7a4ba918b7a63a7a2c0370 100644 (file)
@@ -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"