--- ext/pdo_mysql/mysql_driver.c 2006-12-02 17:26:53.000000000 +0100 +++ ext/pdo_mysql/mysql_driver.c 2006-12-02 17:27:12.000000000 +0100 @@ -436,6 +436,7 @@ pdo_mysql_db_handle *H; int i, ret = 0; char *host = NULL, *unix_socket = NULL; + char *connect_charset = NULL; unsigned int port = 3306; char *dbname; struct pdo_data_src_parser vars[] = { @@ -546,6 +547,13 @@ if (vars[2].optval && !strcmp("localhost", vars[2].optval)) { unix_socket = vars[4].optval; } + + connect_charset = PDOMYSQLG(connect_charset); + + if (connect_charset != NULL) { + mysql_options(H->server, MYSQL_SET_CHARSET_NAME, connect_charset); + } + if (mysql_real_connect(H->server, host, dbh->username, dbh->password, dbname, port, unix_socket, connect_opts) == NULL) { pdo_mysql_error(dbh); goto cleanup; --- ext/pdo_mysql/pdo_mysql.c 2006-12-02 17:26:53.000000000 +0100 +++ ext/pdo_mysql/pdo_mysql.c 2006-12-02 17:27:12.000000000 +0100 @@ -30,6 +30,9 @@ #include "php_pdo_mysql.h" #include "php_pdo_mysql_int.h" +ZEND_DECLARE_MODULE_GLOBALS(pdo_mysql) +static PHP_GINIT_FUNCTION(pdo_mysql); + /* {{{ pdo_mysql_functions[] */ zend_function_entry pdo_mysql_functions[] = { {NULL, NULL, NULL} @@ -61,7 +64,11 @@ NULL, PHP_MINFO(pdo_mysql), "1.0.2", - STANDARD_MODULE_PROPERTIES + PHP_MODULE_GLOBALS(pdo_mysql), + PHP_GINIT(pdo_mysql), + NULL, + NULL, + STANDARD_MODULE_PROPERTIES_EX }; /* }}} */ @@ -69,12 +76,23 @@ ZEND_GET_MODULE(pdo_mysql) #endif +PHP_INI_BEGIN() + STD_PHP_INI_ENTRY("pdo_mysql.connect_charset", NULL, PHP_INI_ALL, OnUpdateString, connect_charset, zend_pdo_mysql_globals, pdo_mysql_globals) +PHP_INI_END() + +static PHP_GINIT_FUNCTION(pdo_mysql) +{ + pdo_mysql_globals->connect_charset = NULL; +} + /* true global environment */ /* {{{ PHP_MINIT_FUNCTION */ PHP_MINIT_FUNCTION(pdo_mysql) { + REGISTER_INI_ENTRIES(); + REGISTER_PDO_CLASS_CONST_LONG("MYSQL_ATTR_USE_BUFFERED_QUERY", (long)PDO_MYSQL_ATTR_USE_BUFFERED_QUERY); REGISTER_PDO_CLASS_CONST_LONG("MYSQL_ATTR_LOCAL_INFILE", (long)PDO_MYSQL_ATTR_LOCAL_INFILE); REGISTER_PDO_CLASS_CONST_LONG("MYSQL_ATTR_INIT_COMMAND", (long)PDO_MYSQL_ATTR_INIT_COMMAND); @@ -91,6 +109,7 @@ */ PHP_MSHUTDOWN_FUNCTION(pdo_mysql) { + UNREGISTER_INI_ENTRIES(); php_pdo_unregister_driver(&pdo_mysql_driver); return SUCCESS; } @@ -103,6 +122,8 @@ php_info_print_table_start(); php_info_print_table_header(2, "PDO Driver for MySQL, client library version", mysql_get_client_info()); php_info_print_table_end(); + + DISPLAY_INI_ENTRIES(); } /* }}} */ --- ext/pdo_mysql/php_pdo_mysql.h 2006-12-02 17:26:53.000000000 +0100 +++ ext/pdo_mysql/php_pdo_mysql.h 2006-12-02 17:28:49.000000000 +0100 @@ -40,6 +40,18 @@ PHP_RSHUTDOWN_FUNCTION(pdo_mysql); PHP_MINFO_FUNCTION(pdo_mysql); +ZEND_BEGIN_MODULE_GLOBALS(pdo_mysql) + char *connect_charset; +ZEND_END_MODULE_GLOBALS(pdo_mysql) + +#ifdef ZTS +# define PDOMYSQLG(v) TSRMG(pdo_mysql_globals_id, zend_pdo_mysql_globals *, v) +#else +# define PDOMYSQLG(v) (pdo_mysql_globals.v) +#endif + +ZEND_EXTERN_MODULE_GLOBALS(pdo_mysql) + #endif /* PHP_PDO_MYSQL_H */