diff options
| author | Scott MacVicar <scottmac@php.net> | 2007-05-14 17:10:47 +0000 | 
|---|---|---|
| committer | Scott MacVicar <scottmac@php.net> | 2007-05-14 17:10:47 +0000 | 
| commit | ac38b635cb83304566b31901cf4aa95bd108d941 (patch) | |
| tree | c8367120f7236078030a37e5ca248715d4034388 /ext/mysql/php_mysql.c | |
| parent | a64089668532a8cef068bd730a79413a6a447f63 (diff) | |
| download | php-git-ac38b635cb83304566b31901cf4aa95bd108d941.tar.gz | |
Add mysql_set_charset() so that the connection encoding can be changed. This is similar to the SET NAMES statement but allows the mysql_real_escape_string to use the correct character set.
Diffstat (limited to 'ext/mysql/php_mysql.c')
| -rw-r--r-- | ext/mysql/php_mysql.c | 38 | 
1 files changed, 37 insertions, 1 deletions
diff --git a/ext/mysql/php_mysql.c b/ext/mysql/php_mysql.c index df10b6d9b7..bc090144e1 100644 --- a/ext/mysql/php_mysql.c +++ b/ext/mysql/php_mysql.c @@ -101,6 +101,10 @@ static int le_result, le_link, le_plink;  #define MYSQL_HAS_YEAR  #endif +#if (MYSQL_VERSION_ID >= 40113 && MYSQL_VERSION_ID < 50000) || MYSQL_VERSION_ID >= 50007 +#define MYSQL_HAS_SET_CHARSET +#endif +  #define MYSQL_ASSOC		1<<0  #define MYSQL_NUM		1<<1  #define MYSQL_BOTH		(MYSQL_ASSOC|MYSQL_NUM) @@ -181,7 +185,9 @@ zend_function_entry mysql_functions[] = {  #endif  	PHP_FE(mysql_info,		            				NULL) -	  +#ifdef MYSQL_HAS_SET_CHARSET +	PHP_FE(mysql_set_charset,							NULL) +#endif  	/* for downwards compatability */  	PHP_FALIAS(mysql,				mysql_db_query,		NULL)  	PHP_FALIAS(mysql_fieldname,		mysql_field_name,	NULL) @@ -1124,6 +1130,36 @@ PHP_FUNCTION(mysql_client_encoding)  /* }}} */  #endif +#ifdef MYSQL_HAS_SET_CHARSET +/* {{{ proto bool mysql_set_charset(string csname [, int link_identifier]) +   sets client character set */ +PHP_FUNCTION(mysql_set_charset) +{ +	zval *mysql_link = NULL; +	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, &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); + +	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])  | 
