kalle Mon, 17 Jan 2011 09:54:22 +0000 Revision: http://svn.php.net/viewvc?view=revision&revision=307529
Log: MFT: Implemented FR #47802 (Support for setting character sets in DSN strings) Bug: http://bugs.php.net/47802 (Assigned) PDO_MYSQL doesn't use the charset parameter Changed paths: U php/php-src/branches/PHP_5_3/NEWS U php/php-src/branches/PHP_5_3/ext/pdo_mysql/mysql_driver.c U php/php-src/branches/PHP_5_3/ext/pdo_mysql/php_pdo_mysql_int.h U php/php-src/branches/PHP_5_3/ext/pdo_mysql/tests/mysql_pdo_test.inc A php/php-src/branches/PHP_5_3/ext/pdo_mysql/tests/pdo_mysql_connect_charset.phpt U php/php-src/trunk/NEWS U php/php-src/trunk/UPGRADING Modified: php/php-src/branches/PHP_5_3/NEWS =================================================================== --- php/php-src/branches/PHP_5_3/NEWS 2011-01-17 07:59:46 UTC (rev 307528) +++ php/php-src/branches/PHP_5_3/NEWS 2011-01-17 09:54:22 UTC (rev 307529) @@ -68,6 +68,8 @@ server mode. (Gustavo) - PDO MySQL driver: + . Implemented FR #47802 (Support for setting character sets in DSN strings). + (Kalle) . Fixed bug #53551 (PDOStatement execute segfaults for pdo_mysql driver). (Johannes) Modified: php/php-src/branches/PHP_5_3/ext/pdo_mysql/mysql_driver.c =================================================================== --- php/php-src/branches/PHP_5_3/ext/pdo_mysql/mysql_driver.c 2011-01-17 07:59:46 UTC (rev 307528) +++ php/php-src/branches/PHP_5_3/ext/pdo_mysql/mysql_driver.c 2011-01-17 09:54:22 UTC (rev 307529) @@ -711,6 +711,13 @@ #endif } +#ifdef PDO_MYSQL_HAS_CHARSET + if (vars[0].optval && mysql_options(H->server, MYSQL_SET_CHARSET_NAME, vars[0].optval)) { + pdo_mysql_error(dbh); + goto cleanup; + } +#endif + dbname = vars[1].optval; host = vars[2].optval; if(vars[3].optval) { Modified: php/php-src/branches/PHP_5_3/ext/pdo_mysql/php_pdo_mysql_int.h =================================================================== --- php/php-src/branches/PHP_5_3/ext/pdo_mysql/php_pdo_mysql_int.h 2011-01-17 07:59:46 UTC (rev 307528) +++ php/php-src/branches/PHP_5_3/ext/pdo_mysql/php_pdo_mysql_int.h 2011-01-17 09:54:22 UTC (rev 307529) @@ -33,6 +33,10 @@ # define PDO_MYSQL_PARAM_BIND MYSQL_BIND #endif +#if (MYSQL_VERSION_ID >= 40113 && MYSQL_VERSION_ID < 50000) || MYSQL_VERSION_ID >= 50007 || defined(MYSQL_USE_MYSQLND) +# define PDO_MYSQL_HAS_CHARSET +#endif + #if defined(PDO_USE_MYSQLND) && PHP_DEBUG && !defined(PHP_WIN32) #define PDO_DBG_ENABLED 1 Modified: php/php-src/branches/PHP_5_3/ext/pdo_mysql/tests/mysql_pdo_test.inc =================================================================== --- php/php-src/branches/PHP_5_3/ext/pdo_mysql/tests/mysql_pdo_test.inc 2011-01-17 07:59:46 UTC (rev 307528) +++ php/php-src/branches/PHP_5_3/ext/pdo_mysql/tests/mysql_pdo_test.inc 2011-01-17 09:54:22 UTC (rev 307529) @@ -4,9 +4,9 @@ class MySQLPDOTest extends PDOTest { - static function factory($classname = 'PDO', $drop_test_tables = false, $myattr = null) { + static function factory($classname = 'PDO', $drop_test_tables = false, $myattr = null, $mydsn = null) { - $dsn = self::getDSN(); + $dsn = self::getDSN($mydsn); $user = PDO_MYSQL_TEST_USER; $pass = PDO_MYSQL_TEST_PASS; $attr = getenv('PDOTEST_ATTR'); Added: php/php-src/branches/PHP_5_3/ext/pdo_mysql/tests/pdo_mysql_connect_charset.phpt =================================================================== --- php/php-src/branches/PHP_5_3/ext/pdo_mysql/tests/pdo_mysql_connect_charset.phpt (rev 0) +++ php/php-src/branches/PHP_5_3/ext/pdo_mysql/tests/pdo_mysql_connect_charset.phpt 2011-01-17 09:54:22 UTC (rev 307529) @@ -0,0 +1,34 @@ +--TEST-- +PDO_MYSQL: Defining a connection charset in the DSN +--SKIPIF-- +<?php +require_once(dirname(__FILE__) . DIRECTORY_SEPARATOR . 'skipif.inc'); +require_once(dirname(__FILE__) . DIRECTORY_SEPARATOR . 'mysql_pdo_test.inc'); +MySQLPDOTest::skip(); +?> +--FILE-- +<?php + /* TODO: remove this test after fix and enable the BIT test in pdo_mysql_types.phpt again */ + require_once(dirname(__FILE__) . DIRECTORY_SEPARATOR . 'mysql_pdo_test.inc'); + + /* Connect to mysql to determine the current charset so we can diffinate it */ + $link = MySQLPDOTest::factory(); + $charset = $link->query("SHOW VARIABLES LIKE 'character_set_connection'")->fetchObject()->value; + + /* Make sure that we don't attempt to set the current character set to make this case useful */ + $new_charset = ($charset == 'latin1' ? 'ascii' : 'latin1'); + + /* Done with the original connection, create a second link to test the character set being defined */ + unset($link); + + $link = MySQLPDOTest::factory('PDO', false, null, Array('charset' => $new_charset)); + $conn_charset = $link->query("SHOW VARIABLES LIKE 'character_set_connection'")->fetchObject()->value; + + if ($charset !== $conn_charset) { + echo "done!\n"; + } else { + echo "failed!\n"; + } +?> +--EXPECTF-- +done! \ No newline at end of file Modified: php/php-src/trunk/NEWS =================================================================== --- php/php-src/trunk/NEWS 2011-01-17 07:59:46 UTC (rev 307528) +++ php/php-src/trunk/NEWS 2011-01-17 09:54:22 UTC (rev 307529) @@ -164,8 +164,6 @@ Traversable. (Andrey, Johannes) . MySQLi: Implemented FR #39847 (mysqli_fetch_[field|fields|field_direct] need to return db). (Kalle) - . PDO_mysql: Implemented FR #47802 (Support for setting character sets in - DSN strings). (Kalle) . PDO_mysql: Removed support for linking with MySQL client libraries older than 4.1. (Johannes) Modified: php/php-src/trunk/UPGRADING =================================================================== --- php/php-src/trunk/UPGRADING 2011-01-17 07:59:46 UTC (rev 307528) +++ php/php-src/trunk/UPGRADING 2011-01-17 09:54:22 UTC (rev 307529) @@ -161,8 +161,6 @@ strings. This breaks code that iterated the resulting stream array using a numeric index, but makes easier to identify which of the passed streams are present in the result. -- pdo_mysql now supports setting character sets when connecting in the DSN - string. - mysqli_fetch_[field|fields|field_direct] now returns an additional property named 'db' that contains the database name of the associated result.
-- PHP CVS Mailing List (http://www.php.net/) To unsubscribe, visit: http://www.php.net/unsub.php