cvs: php-src /ext/mysql php_mysql.c php_mysql.h
| From: | Scott MacVicar | Date: | Mon, 14 May 2007 17:11:50 +0000 |
| Subject: | cvs: php-src /ext/mysql php_mysql.c php_mysql.h | ||
| Groups: | php.cvs | ||
| Request: | Send a blank email to php-cvs+get-44302@lists.php.net to get a copy of this message | ||
scottmac Mon May 14 17:11:50 2007 UTC
Modified files:
/php-src/ext/mysql php_mysql.c php_mysql.h
Log:
MFB: 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.
http://cvs.php.net/viewvc.cgi/php-src/ext/mysql/php_mysql.c?r1=1.233&r2=1.234&diff_format=u
Index: php-src/ext/mysql/php_mysql.c
diff -u php-src/ext/mysql/php_mysql.c:1.233 php-src/ext/mysql/php_mysql.c:1.234
--- php-src/ext/mysql/php_mysql.c:1.233 Mon Apr 23 09:32:36 2007
+++ php-src/ext/mysql/php_mysql.c Mon May 14 17:11:50 2007
@@ -18,7 +18,7 @@
+----------------------------------------------------------------------+
*/
-/* $Id: php_mysql.c,v 1.233 2007/04/23 09:32:36 tony2001 Exp $ */
+/* $Id: php_mysql.c,v 1.234 2007/05/14 17:11:50 scottmac Exp $ */
/* TODO:
*
@@ -95,6 +95,10 @@
#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)
@@ -175,7 +179,9 @@
#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)
@@ -611,7 +617,7 @@
}
if (UG(unicode)) {
-#if MYSQL_VERSION_ID > 40112
+#ifdef MYSQL_HAS_SET_CHARSET
mysql_set_character_set(&mysql->conn, "utf8");
#else
char *encoding = (char *)mysql_character_set_name(&mysql->conn);
@@ -1051,6 +1057,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 = 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, 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
http://cvs.php.net/viewvc.cgi/php-src/ext/mysql/php_mysql.h?r1=1.39&r2=1.40&diff_format=u
Index: php-src/ext/mysql/php_mysql.h
diff -u php-src/ext/mysql/php_mysql.h:1.39 php-src/ext/mysql/php_mysql.h:1.40
--- php-src/ext/mysql/php_mysql.h:1.39 Mon Jan 1 09:29:25 2007
+++ php-src/ext/mysql/php_mysql.h Mon May 14 17:11:50 2007
@@ -17,7 +17,7 @@
*/
-/* $Id: php_mysql.h,v 1.39 2007/01/01 09:29:25 sebastian Exp $ */
+/* $Id: php_mysql.h,v 1.40 2007/05/14 17:11:50 scottmac Exp $ */
#ifndef PHP_MYSQL_H
#define PHP_MYSQL_H
@@ -91,6 +91,9 @@
PHP_FUNCTION(mysql_thread_id);
PHP_FUNCTION(mysql_client_encoding);
PHP_FUNCTION(mysql_ping);
+#if (MYSQL_VERSION_ID >= 40113 && MYSQL_VERSION_ID < 50000) || MYSQL_VERSION_ID >=
50007
+PHP_FUNCTION(mysql_set_charset);
+#endif
ZEND_BEGIN_MODULE_GLOBALS(mysql)
long default_link;