summaryrefslogtreecommitdiff
path: root/ext/mysqli/mysqli_nonapi.c
diff options
context:
space:
mode:
authorGeorg Richter <georg@php.net>2005-05-08 08:39:56 +0000
committerGeorg Richter <georg@php.net>2005-05-08 08:39:56 +0000
commitb654b20ef698999221f9faf8756803e0b21c241d (patch)
tree5397e3b63c598db4617c3bafbd15f4ac93d551bb /ext/mysqli/mysqli_nonapi.c
parent882bd85360d6f37767dc2c50810bb52a01dbe46e (diff)
downloadphp-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.c47
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