Index: ext/mysql/php_mysql.c =================================================================== RCS file: /repository/php-src/ext/mysql/php_mysql.c,v retrieving revision 1.230 diff -u -r1.230 php_mysql.c --- ext/mysql/php_mysql.c 1 Jan 2007 09:29:25 -0000 1.230 +++ ext/mysql/php_mysql.c 8 Feb 2007 15:50:38 -0000 @@ -95,6 +95,10 @@ #define MYSQL_HAS_YEAR #endif +#if (MYSQL_VERSION_ID > 40112 && MYSQL_VERSION_ID < 50000) || MYSQL_VERSION_ID > 50005 +#define MYSQL_HAS_SET_CHARSET +#endif + #define MYSQL_ASSOC 1<<0 #define MYSQL_NUM 1<<1 #define MYSQL_BOTH (MYSQL_ASSOC|MYSQL_NUM) @@ -167,6 +171,9 @@ PHP_FE(mysql_thread_id, NULL) PHP_FE(mysql_client_encoding, NULL) PHP_FE(mysql_ping, NULL) +#ifdef MYSQL_HAS_SET_CHARSET + PHP_FE(mysql_set_charset, NULL) +#endif #ifdef HAVE_GETINFO_FUNCS PHP_FE(mysql_get_client_info, NULL) PHP_FE(mysql_get_host_info, NULL) @@ -1053,6 +1060,42 @@ /* }}} */ #endif +#ifdef MYSQL_HAS_SET_CHARSET +/* {{{ proto bool mysql_set_charset(string csname [, int link_identifier]) U + sets client character set */ +PHP_FUNCTION(mysql_set_charset) +{ + zval *mysql_link; + char *csname; + int id = -1, csname_len; + php_mysql_conn *mysql; + + if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "s&|r", &csname, &csname_len, UG(utf8_conv), &mysql_link) == FAILURE) { + WRONG_PARAM_COUNT + } + + if (ZEND_NUM_ARGS() == 1) { + id = php_mysql_get_default_link(INTERNAL_FUNCTION_PARAM_PASSTHRU); + CHECK_LINK(id); + } + + ZEND_FETCH_RESOURCE2(mysql, php_mysql_conn *, &mysql_link, id, "MySQL-Link", le_link, le_plink); + + /* Only allow the use of this function with unicode.semantics=On */ + if (UG(unicode) && (csname_len != 4 || strncasecmp(csname, "utf8", 4))) { + php_error_docref(NULL TSRMLS_CC, E_WARNING, "Character set %s is not supported when running PHP with unicode.semantics=On.", csname); + RETURN_FALSE; + } + + if (!mysql_set_character_set(&mysql->conn, csname)) { + RETURN_TRUE; + } else { + RETURN_FALSE; + } +} +/* }}} */ +#endif + #ifndef NETWARE /* The below two functions not supported on NetWare */ #if MYSQL_VERSION_ID < 40000 /* {{{ proto bool mysql_create_db(string database_name [, int link_identifier]) U Index: ext/mysql/php_mysql.h =================================================================== RCS file: /repository/php-src/ext/mysql/php_mysql.h,v retrieving revision 1.39 diff -u -r1.39 php_mysql.h --- ext/mysql/php_mysql.h 1 Jan 2007 09:29:25 -0000 1.39 +++ ext/mysql/php_mysql.h 8 Feb 2007 15:36:27 -0000 @@ -91,6 +91,9 @@ PHP_FUNCTION(mysql_thread_id); PHP_FUNCTION(mysql_client_encoding); PHP_FUNCTION(mysql_ping); +#if (MYSQL_VERSION_ID > 40112 && MYSQL_VERSION_ID < 50000) || MYSQL_VERSION_ID > 50005 +PHP_FUNCTION(mysql_set_charset); +#endif ZEND_BEGIN_MODULE_GLOBALS(mysql) long default_link;