mirror of
https://github.com/php/php-src.git
synced 2024-11-28 12:26:37 +08:00
MFT: Implemented FR #47802 (Support for setting character sets in DSN strings)
This commit is contained in:
parent
ff4982784a
commit
504b6f695e
2
NEWS
2
NEWS
@ -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)
|
||||
|
||||
|
@ -711,6 +711,13 @@ static int pdo_mysql_handle_factory(pdo_dbh_t *dbh, zval *driver_options TSRMLS_
|
||||
#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) {
|
||||
|
@ -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
|
||||
|
||||
|
@ -4,9 +4,9 @@ require_once(dirname(__FILE__) . '/../../../ext/pdo/tests/pdo_test.inc');
|
||||
|
||||
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');
|
||||
|
34
ext/pdo_mysql/tests/pdo_mysql_connect_charset.phpt
Normal file
34
ext/pdo_mysql/tests/pdo_mysql_connect_charset.phpt
Normal file
@ -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!
|
Loading…
Reference in New Issue
Block a user