diff options
| author | Georg Richter <georg@php.net> | 2005-05-08 08:39:56 +0000 |
|---|---|---|
| committer | Georg Richter <georg@php.net> | 2005-05-08 08:39:56 +0000 |
| commit | b654b20ef698999221f9faf8756803e0b21c241d (patch) | |
| tree | 5397e3b63c598db4617c3bafbd15f4ac93d551bb /ext/mysqli/mysqli_nonapi.c | |
| parent | 882bd85360d6f37767dc2c50810bb52a01dbe46e (diff) | |
| download | php-git-b654b20ef698999221f9faf8756803e0b21c241d.tar.gz | |
Added new function mysqli_set_character_set_name
Diffstat (limited to 'ext/mysqli/mysqli_nonapi.c')
| -rw-r--r-- | ext/mysqli/mysqli_nonapi.c | 47 |
1 files changed, 47 insertions, 0 deletions
diff --git a/ext/mysqli/mysqli_nonapi.c b/ext/mysqli/mysqli_nonapi.c index 31d4c13723..169b3240b4 100644 --- a/ext/mysqli/mysqli_nonapi.c +++ b/ext/mysqli/mysqli_nonapi.c @@ -29,6 +29,8 @@ #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) @@ -251,6 +253,51 @@ PHP_FUNCTION(mysqli_query) } /* }}} */ +#ifdef HAVE_MYSQLI_SET_CHARSET +/* {{{ proto bool mysqli_set_character_set_name(object link, string csname) + sets client character set */ +PHP_FUNCTION(mysqli_set_character_set_name) +{ + struct charset_info_st *cs; + const char *save_csdir = charsets_dir; + MY_MYSQL *mysql; + zval *mysql_link; + char *cs_name = NULL; + unsigned int len; + + if (zend_parse_method_parameters(ZEND_NUM_ARGS() TSRMLS_CC, getThis(), "Os", &mysql_link, mysqli_link_class_entry, &cs_name, &len) == FAILURE) { + return; + } + 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); + } + charsets_dir = save_csdir; + RETURN_FALSE; +} +/* }}} */ +#endif + /* * Local variables: * tab-width: 4 |
