/** * Function called just after a connection to the MySQL database server has * been established. It sets the connection collation, and determins the * version of MySQL which is running. * * @param mixed $link mysql link resource|object * @param boolean $is_controluser whether link is for control user * * @return void */ function PMA_DBI_postConnect($link, $is_controluser = false) { if ($is_controluser) { return; } if (!defined('PMA_MYSQL_INT_VERSION')) { if (PMA_Util::cacheExists('PMA_MYSQL_INT_VERSION', true)) { define('PMA_MYSQL_INT_VERSION', PMA_Util::cacheGet('PMA_MYSQL_INT_VERSION', true)); define('PMA_MYSQL_MAJOR_VERSION', PMA_Util::cacheGet('PMA_MYSQL_MAJOR_VERSION', true)); define('PMA_MYSQL_STR_VERSION', PMA_Util::cacheGet('PMA_MYSQL_STR_VERSION', true)); define('PMA_MYSQL_VERSION_COMMENT', PMA_Util::cacheGet('PMA_MYSQL_VERSION_COMMENT', true)); define('PMA_DRIZZLE', PMA_Util::cacheGet('PMA_DRIZZLE', true)); } else { $version = PMA_DBI_fetch_single_row('SELECT @@version, @@version_comment', 'ASSOC', $link); if ($version) { $match = explode('.', $version['@@version']); define('PMA_MYSQL_MAJOR_VERSION', (int) $match[0]); define('PMA_MYSQL_INT_VERSION', (int) sprintf('%d%02d%02d', $match[0], $match[1], intval($match[2]))); define('PMA_MYSQL_STR_VERSION', $version['@@version']); define('PMA_MYSQL_VERSION_COMMENT', $version['@@version_comment']); } else { define('PMA_MYSQL_INT_VERSION', 50015); define('PMA_MYSQL_MAJOR_VERSION', 5); define('PMA_MYSQL_STR_VERSION', '5.00.15'); define('PMA_MYSQL_VERSION_COMMENT', ''); } PMA_Util::cacheSet('PMA_MYSQL_INT_VERSION', PMA_MYSQL_INT_VERSION, true); PMA_Util::cacheSet('PMA_MYSQL_MAJOR_VERSION', PMA_MYSQL_MAJOR_VERSION, true); PMA_Util::cacheSet('PMA_MYSQL_STR_VERSION', PMA_MYSQL_STR_VERSION, true); PMA_Util::cacheSet('PMA_MYSQL_VERSION_COMMENT', PMA_MYSQL_VERSION_COMMENT, true); // Detect Drizzle - it does not support character sets $charset_result = PMA_DBI_get_variable('character_set_results', PMA_DBI_GETVAR_GLOBAL, $link); if ($charset_result) { define('PMA_DRIZZLE', false); } else { define('PMA_DRIZZLE', true); } PMA_Util::cacheSet('PMA_DRIZZLE', PMA_DRIZZLE, true); } } // Skip charsets for Drizzle if (!PMA_DRIZZLE) { if (!empty($GLOBALS['collation_connection'])) { PMA_DBI_query("SET CHARACTER SET 'utf8';", $link, PMA_DBI_QUERY_STORE); $set_collation_con_query = "SET collation_connection = '" . PMA_Util::sqlAddSlashes($GLOBALS['collation_connection']) . "';"; PMA_DBI_query($set_collation_con_query, $link, PMA_DBI_QUERY_STORE); } else { PMA_DBI_query("SET NAMES 'utf8' COLLATE 'utf8_general_ci';", $link, PMA_DBI_QUERY_STORE); } } // Cache plugin list for Drizzle if (PMA_DRIZZLE && !PMA_Util::cacheExists('drizzle_engines', true)) { $sql = "SELECT p.plugin_name, m.module_library\n FROM data_dictionary.plugins p\n JOIN data_dictionary.modules m USING (module_name)\n WHERE p.plugin_type = 'StorageEngine'\n AND p.plugin_name NOT IN ('FunctionEngine', 'schema')\n AND p.is_active = 'YES'"; $engines = PMA_DBI_fetch_result($sql, 'plugin_name', null, $link); PMA_Util::cacheSet('drizzle_engines', $engines, true); } }
/** * @uses ./libraries/charset_conversion.lib.php * @uses PMA_DBI_QUERY_STORE * @uses PMA_REMOVED_NON_UTF_8 * @uses PMA_MYSQL_INT_VERSION * @uses PMA_MYSQL_STR_VERSION * @uses PMA_DBI_GETVAR_SESSION * @uses PMA_DBI_fetch_value() * @uses PMA_DBI_query() * @uses PMA_DBI_get_variable() * @uses $GLOBALS['collation_connection'] * @uses $GLOBALS['charset_connection'] * @uses $GLOBALS['available_languages'] * @uses $GLOBALS['mysql_charset_map'] * @uses $GLOBALS['charset'] * @uses $GLOBALS['lang'] * @uses $GLOBALS['cfg']['Lang'] * @uses $GLOBALS['cfg']['ColumnTypes'] * @uses defined() * @uses explode() * @uses sprintf() * @uses intval() * @uses define() * @uses defined() * @uses substr() * @uses count() * @param mixed $link mysql link resource|object * @param boolean $is_controluser */ function PMA_DBI_postConnect($link, $is_controluser = false) { if (!defined('PMA_MYSQL_INT_VERSION')) { $mysql_version = PMA_DBI_fetch_value('SELECT VERSION()', 0, 0, $link, PMA_DBI_QUERY_STORE); if ($mysql_version) { $match = explode('.', $mysql_version); define('PMA_MYSQL_INT_VERSION', (int) sprintf('%d%02d%02d', $match[0], $match[1], intval($match[2]))); define('PMA_MYSQL_STR_VERSION', $mysql_version); unset($mysql_version, $match); } else { define('PMA_MYSQL_INT_VERSION', 32332); define('PMA_MYSQL_STR_VERSION', '3.23.32'); } } if (!defined('PMA_ENGINE_KEYWORD')) { if (PMA_MYSQL_INT_VERSION >= 40102) { define('PMA_ENGINE_KEYWORD', 'ENGINE'); } else { define('PMA_ENGINE_KEYWORD', 'TYPE'); } } if (PMA_MYSQL_INT_VERSION >= 40100) { // If $lang is defined and we are on MySQL >= 4.1.x, // we auto-switch the lang to its UTF-8 version (if it exists and user // didn't force language) if (!empty($GLOBALS['lang']) && substr($GLOBALS['lang'], -5) != 'utf-8' && !isset($GLOBALS['cfg']['Lang'])) { $lang_utf_8_version = substr($GLOBALS['lang'], 0, strpos($GLOBALS['lang'], '-')) . '-utf-8'; if (!empty($GLOBALS['available_languages'][$lang_utf_8_version])) { $GLOBALS['lang'] = $lang_utf_8_version; $GLOBALS['charset'] = 'utf-8'; define('PMA_LANG_RELOAD', 1); } } // and we remove the non-UTF-8 choices to avoid confusion // (unless there is a forced language) if (!defined('PMA_REMOVED_NON_UTF_8') && !isset($GLOBALS['cfg']['Lang'])) { foreach ($GLOBALS['available_languages'] as $each_lang => $dummy) { if (substr($each_lang, -5) != 'utf-8') { unset($GLOBALS['available_languages'][$each_lang]); } } define('PMA_REMOVED_NON_UTF_8', 1); } $mysql_charset = $GLOBALS['mysql_charset_map'][$GLOBALS['charset']]; if ($is_controluser || empty($GLOBALS['collation_connection']) || (strpos($GLOBALS['collation_connection'], '_') ? substr($GLOBALS['collation_connection'], 0, strpos($GLOBALS['collation_connection'], '_')) : $GLOBALS['collation_connection']) == $mysql_charset) { PMA_DBI_query('SET NAMES ' . $mysql_charset . ';', $link, PMA_DBI_QUERY_STORE); } else { PMA_DBI_query('SET CHARACTER SET ' . $mysql_charset . ';', $link, PMA_DBI_QUERY_STORE); } if (!empty($GLOBALS['collation_connection'])) { PMA_DBI_query('SET collation_connection = \'' . $GLOBALS['collation_connection'] . '\';', $link, PMA_DBI_QUERY_STORE); } if (!$is_controluser) { $GLOBALS['collation_connection'] = PMA_DBI_get_variable('collation_connection', PMA_DBI_GETVAR_SESSION, $link); $GLOBALS['charset_connection'] = PMA_DBI_get_variable('character_set_connection', PMA_DBI_GETVAR_SESSION, $link); } // Add some field types to the list, this needs to be done once per session! if (!in_array('BINARY', $GLOBALS['cfg']['ColumnTypes'])) { $GLOBALS['cfg']['ColumnTypes'][] = 'BINARY'; } if (!in_array('VARBINARY', $GLOBALS['cfg']['ColumnTypes'])) { $GLOBALS['cfg']['ColumnTypes'][] = 'VARBINARY'; } } else { require_once './libraries/charset_conversion.lib.php'; } }
function PMA_DBI_postConnect($link) { global $collation_connection, $charset_connection; if (!defined('PMA_MYSQL_INT_VERSION')) { $result = PMA_DBI_query('SELECT VERSION() AS version', $link, PMA_DBI_QUERY_STORE); if ($result != FALSE && @PMA_DBI_num_rows($result) > 0) { $row = PMA_DBI_fetch_row($result); $match = explode('.', $row[0]); PMA_DBI_free_result($result); } if (!isset($row)) { define('PMA_MYSQL_INT_VERSION', 32332); define('PMA_MYSQL_STR_VERSION', '3.23.32'); } else { define('PMA_MYSQL_INT_VERSION', (int) sprintf('%d%02d%02d', $match[0], $match[1], intval($match[2]))); define('PMA_MYSQL_STR_VERSION', $row[0]); unset($result, $row, $match); } } if (PMA_MYSQL_INT_VERSION >= 40100) { // If $lang is defined and we are on MySQL >= 4.1.x, // we auto-switch the lang to its UTF-8 version (if it exists) if (!empty($GLOBALS['lang']) && substr($GLOBALS['lang'], -5) != 'utf-8') { $lang_utf_8_version = substr($GLOBALS['lang'], 0, strpos($GLOBALS['lang'], '-')) . '-utf-8'; if (!empty($GLOBALS['available_languages'][$lang_utf_8_version])) { $GLOBALS['lang'] = $lang_utf_8_version; $GLOBALS['charset'] = $charset = 'utf-8'; } } // and we remove the non-UTF-8 choices to avoid confusion if (!defined('PMA_REMOVED_NON_UTF_8')) { $tmp_available_languages = $GLOBALS['available_languages']; $GLOBALS['available_languages'] = array(); foreach ($tmp_available_languages as $tmp_lang => $tmp_lang_data) { if (substr($tmp_lang, -5) == 'utf-8') { $GLOBALS['available_languages'][$tmp_lang] = $tmp_lang_data; } } // end foreach unset($tmp_lang, $tmp_lang_data, $tmp_available_languages); define('PMA_REMOVED_NON_UTF_8', 1); } $mysql_charset = $GLOBALS['mysql_charset_map'][$GLOBALS['charset']]; if (empty($collation_connection) || (strpos($collation_connection, '_') ? substr($collation_connection, 0, strpos($collation_connection, '_')) : $collation_connection) == $mysql_charset) { PMA_DBI_query('SET NAMES ' . $mysql_charset . ';', $link, PMA_DBI_QUERY_STORE); } else { PMA_DBI_query('SET CHARACTER SET ' . $mysql_charset . ';', $link, PMA_DBI_QUERY_STORE); } if (!empty($collation_connection)) { PMA_DBI_query('SET collation_connection = \'' . $collation_connection . '\';', $link, PMA_DBI_QUERY_STORE); } $collation_connection = PMA_DBI_get_variable('collation_connection', PMA_DBI_GETVAR_SESSION, $link); $charset_connection = PMA_DBI_get_variable('character_set_connection', PMA_DBI_GETVAR_SESSION, $link); // Add some field types to the list // (we pass twice here; feel free to code something better :) if (!defined('PMA_ADDED_FIELD_TYPES')) { $GLOBALS['cfg']['ColumnTypes'][] = 'BINARY'; $GLOBALS['cfg']['ColumnTypes'][] = 'VARBINARY'; define('PMA_ADDED_FIELD_TYPES', 1); } } else { require_once './libraries/charset_conversion.lib.php'; } }