php-src/ext/mysqli/tests/mysqli_change_user_set_names.phpt

165 lines
5.8 KiB
Plaintext
Raw Normal View History

--TEST--
mysqli_change_user() - SET NAMES
--SKIPIF--
<?php
require_once('skipif.inc');
require_once('skipifemb.inc');
require_once('skipifconnectfailure.inc');
if (!$link = my_mysqli_connect($host, $user, $passwd, $db, $port, $socket))
die(sprintf("skip [%d] %s", mysqli_connect_errno(), mysqli_connect_error()));
if (!$res = mysqli_query($link, 'SELECT version() AS server_version'))
die(sprintf("skip [%d] %s\n", mysqli_errno($link), mysqli_error($link)));
$tmp = mysqli_fetch_assoc($res);
mysqli_free_result($res);
$version = explode('.', $tmp['server_version']);
if (empty($version))
die(sprintf("skip Cannot determine server version, need MySQL Server 4.1+ for the test!"));
if ($version[0] <= 4 && $version[1] < 1)
die(sprintf("ski Need MySQL Server 4.1+ for the test!"));
?>
--FILE--
<?php
require_once('connect.inc');
if (!$link = my_mysqli_connect($host, $user, $passwd, $db, $port, $socket))
printf("[001] [%d] %s\n", mysqli_connect_errno(), mysqli_connect_error());
if (!$res = mysqli_query($link, "SHOW CHARACTER SET LIKE 'latin%'"))
printf("[002] [%d] %s\n", mysqli_errno($link), mysqli_error($link));
$charsets = array();
while ($row = mysqli_fetch_assoc($res))
$charsets[$row['Charset']] = $row['Default collation'];
mysqli_free_result($res);
if (!mysqli_query($link, 'SET NAMES DEFAULT'))
printf("[003] [%d] %s\n", mysqli_errno($link), mysqli_error($link));
if (!$res = mysqli_query($link, 'SELECT
@@character_set_client AS charset_client,
@@character_set_connection AS charset_connection,
@@character_set_results AS charset_results,
@@collation_connection AS collation_connection,
@@collation_database AS collation_database,
@@collation_server AS collation_server'))
printf("[004] [%d] %s\n", mysqli_errno($link), mysqli_error($link));
if (!$defaults = mysqli_fetch_assoc($res))
printf("[005] [%d] %s\n", mysqli_errno($link), mysqli_error($link));
mysqli_free_result($res);
$not_changed = $defaults;
foreach ($charsets as $charset => $collation) {
if (isset($not_changed['charset_client']) &&
$charset != $not_changed['charset_client'] &&
mysqli_query($link, sprintf("SET @@character_set_client = '%s'", $charset)))
unset($not_changed['charset_client']);
if (isset($not_changed['charset_connection']) &&
$charset != $not_changed['charset_connection'] &&
mysqli_query($link, sprintf("SET @@character_connection = '%s'", $charset)))
unset($not_changed['charset_connection']);
if (isset($not_changed['charset_results']) &&
$charset != $not_changed['charset_results'] &&
mysqli_query($link, sprintf("SET @@character_set_results = '%s'", $charset)))
unset($not_changed['charset_results']);
if (isset($not_changed['collation_connection']) &&
$collation != $not_changed['collation_connection'] &&
mysqli_query($link, sprintf("SET @@collation_connection = '%s'", $collation)))
unset($not_changed['collation_connection']);
if (isset($not_changed['collation_database']) &&
$collation != $not_changed['collation_database'] &&
mysqli_query($link, sprintf("SET @@collation_database = '%s'", $collation)))
unset($not_changed['collation_database']);
if (isset($not_changed['collation_server']) &&
$collation != $not_changed['collation_server'] &&
mysqli_query($link, sprintf("SET @@collation_server = '%s'", $collation)))
unset($not_changed['collation_server']);
if (empty($not_changed))
break;
}
if (!$res = mysqli_query($link, 'SELECT
@@character_set_client AS charset_client,
@@character_set_connection AS charset_connection,
@@character_set_results AS charset_results,
@@collation_connection AS collation_connection,
@@collation_database AS collation_database,
@@collation_server AS collation_server'))
printf("[006] [%d] %s\n", mysqli_errno($link), mysqli_error($link));
if (!$modified = mysqli_fetch_assoc($res))
printf("[007] [%d] %s\n", mysqli_errno($link), mysqli_error($link));
mysqli_free_result($res);
if ($modified == $defaults)
printf("[008] Not all settings have been changed\n");
// LAST_INSERT_ID should be reset
mysqli_change_user($link, $user, $passwd, $db);
if (!$res = mysqli_query($link, 'SELECT
@@character_set_client AS charset_client,
@@character_set_connection AS charset_connection,
@@character_set_results AS charset_results,
@@collation_connection AS collation_connection,
@@collation_database AS collation_database,
@@collation_server AS collation_server'))
printf("[009] [%d] %s\n", mysqli_errno($link), mysqli_error($link));
if (!$new = mysqli_fetch_assoc($res))
printf("[010] [%d] %s\n", mysqli_errno($link), mysqli_error($link));
mysqli_free_result($res);
if ($new == $modified) {
printf("[011] Charsets/collations have not been reset.\n");
printf("Got:\n");
var_dump($new);
printf("Expected:\n");
var_dump($defaults);
}
if ((version_compare(PHP_VERSION, '5.9.9', '>') == 1)) {
// charsets cannot take any other value but utf8 in unicode mode
$defaults['charset_client'] = 'utf8';
$defaults['charset_connection'] = 'utf8';
$defaults['charset_results'] = 'utf8';
$defaults['collation_connection'] = 'utf8_general_ci';
}
if ($new != $defaults) {
printf("[012] Charsets/collations have not been reset to their defaults.\n");
printf("Got:\n");
var_dump($new);
printf("Expected:\n");
var_dump($defaults);
}
if (!is_object($charset = mysqli_get_charset($link)))
printf("[013] Expecting object/std_class, got %s/%s\n", gettype($charset), $charset);
if ($charset->charset != $defaults['charset_connection'])
printf("[014] Expecting connection charset to be %s got %s\n",
$defaults['charset_connection'],
$charset->charset);
if ($charset->collation != $defaults['collation_connection'])
printf("[015] Expecting collation to be %s got %s\n",
$defaults['collation_connection'],
$charset->collation);
mysqli_close($link);
print "done!";
?>
--EXPECTF--
done!