Skip to content
Extraits de code Groupes Projets
Valider 68c08bbb rédigé par esj's avatar esj
Parcourir les fichiers

Meilleure solution au problème de l'initialisation de l'alphabet (bug...

Meilleure solution au problème de l'initialisation de l'alphabet (bug [10427] corrigé rapidement par [10437]): à la première connexion au serveur principal (donc avant même d'avoir lu les metas), plutot que de tester uniquement la présence de la table meta, on lui demande la valeur de la meta '''charset_sql_connexion''' et on s'en sert pour initialiser le mode de connexion. De plus, la valeur ainsi déterminée sera utilisée pour les connexions aux éventuels serveurs secondaires ce qui garantit que l'intégralité des pages construites à partir de différentes serveurs utiliseront le même alphabet.
parent 28107bdf
Aucune branche associée trouvée
Aucune étiquette associée trouvée
Aucune requête de fusion associée trouvée
...@@ -26,9 +26,6 @@ function base_db_mysql_dist($host, $port, $login, $pass, $db='', $prefixe='') { ...@@ -26,9 +26,6 @@ function base_db_mysql_dist($host, $port, $login, $pass, $db='', $prefixe='') {
$ok = spip_mysql_selectdb($db); $ok = spip_mysql_selectdb($db);
if (defined('_MYSQL_SQL_MODE_TEXT_NOT_NULL')) if (defined('_MYSQL_SQL_MODE_TEXT_NOT_NULL'))
mysql_query("set sql_mode=''"); mysql_query("set sql_mode=''");
$x = isset($GLOBALS['meta']['charset_sql_connexion']) ?
$GLOBALS['meta']['charset_sql_connexion'] : 'utf8';
mysql_query("SET NAMES ". _q($x));
} }
# spip_log("Connexion vers $host, base $db, prefixe $prefixe " # spip_log("Connexion vers $host, base $db, prefixe $prefixe "
# . ($ok ? "operationnelle sur $link" : 'impossible')); # . ($ok ? "operationnelle sur $link" : 'impossible'));
...@@ -117,9 +114,9 @@ function spip_mysql_explain($query, $serveur=''){ ...@@ -117,9 +114,9 @@ function spip_mysql_explain($query, $serveur=''){
// La parametre sous_requete n'est plus utilise // La parametre sous_requete n'est plus utilise
// http://doc.spip.org/@spip_mysql_select // http://doc.spip.org/@spip_mysql_select
function spip_mysql_select($select, $from, $where, function spip_mysql_select($select, $from, $where='',
$groupby, $orderby, $limit, $groupby='', $orderby='', $limit='',
$sousrequete, $having, $sousrequete='', $having='',
$table='', $id='', $serveur='') { $table='', $id='', $serveur='') {
$query = 'SELECT ' . $query = 'SELECT ' .
......
...@@ -149,9 +149,9 @@ function spip_pg_listdbs() { ...@@ -149,9 +149,9 @@ function spip_pg_listdbs() {
} }
// http://doc.spip.org/@spip_pg_select // http://doc.spip.org/@spip_pg_select
function spip_pg_select($select, $from, $where, function spip_pg_select($select, $from, $where='',
$groupby, $orderby, $limit, $groupby='', $orderby='', $limit='',
$sousrequete, $having, $sousrequete='', $having='',
$table='', $id='', $serveur=''){ $table='', $id='', $serveur=''){
$connexion = $GLOBALS['connexions'][$serveur ? $serveur : 0]; $connexion = $GLOBALS['connexions'][$serveur ? $serveur : 0];
......
...@@ -264,32 +264,49 @@ function spip_connect($serveur='') { ...@@ -264,32 +264,49 @@ function spip_connect($serveur='') {
$connexions[$index] = $GLOBALS['db_ok']; $connexions[$index] = $GLOBALS['db_ok'];
$connexions[$index]['spip_connect_version'] = isset($GLOBALS['spip_connect_version']) ? $GLOBALS['spip_connect_version'] : 0; $connexions[$index]['spip_connect_version'] = isset($GLOBALS['spip_connect_version']) ? $GLOBALS['spip_connect_version'] : 0;
if ($serveur) return $connexions[$index]; // initialisation du charset utilise dans les connexions SQL
// celle du serveur principal l'impose aux serveurs secondaires
if (!$serveur) {
$charset = spip_connect_main($GLOBALS['db_ok']);
if (!$charset) {
unset($connexions[$index]);
spip_log("spip_connect: absence de charset");
return false;
}
} else {
$charset = isset($GLOBALS['meta']['charset_sql_connexion']) ?
$GLOBALS['meta']['charset_sql_connexion'] : 'utf8';
}
$f = $GLOBALS['db_ok']['set_connect_charset'];
$f($charset);
return $connexions[$index];
}
// Premiere connexion au serveur principal: // Premiere connexion au serveur principal:
// verifier que la table principale est la // retourner le charset donnee par la table principale
// et que le fichier de connexion n'est pas une version trop vieille // mais verifier que le fichier de connexion n'est pas trop vieux
// Version courante = 0.6 (indication du prefixe comme 6e arg) // Version courante = 0.6 (indication du prefixe comme 6e arg)
// //
// La version 0.0 (non numerotee) doit etre refaite par un admin // La version 0.0 (non numerotee) doit etre refaite par un admin
// les autres fonctionnent toujours, meme si : // les autres fonctionnent toujours, meme si :
// - la version 0.1 est moins performante que la 0.2 // - la version 0.1 est moins performante que la 0.2
// - la 0.2 fait un include_ecrire('inc_db_mysql.php3') // - la 0.2 fait un include_ecrire('inc_db_mysql.php3')
// - la version 0.5 indique le serveur comme 5e arg // - la version 0.5 indique le serveur comme 5e arg
function spip_connect_main($connexion)
{
if ($GLOBALS['spip_connect_version']< 0.1 AND _DIR_RESTREINT){ if ($GLOBALS['spip_connect_version']< 0.1 AND _DIR_RESTREINT){
include_spip('inc/headers'); include_spip('inc/headers');
redirige_par_entete(generer_url_ecrire('upgrade', 'reinstall=oui', true)); redirige_par_entete(generer_url_ecrire('upgrade', 'reinstall=oui', true));
} }
$f = $GLOBALS['db_ok']['countsel']; $f = $connexion['select'];
if (!$f('spip_meta', '', '', '', '', '', '', $index)) { if (!$r = $f('valeur','spip_meta', "nom='charset_sql_connexion'"))
unset($connexions[$index]);
spip_log("spip_connect: table meta vide ($index)");
return false; return false;
} $f = $connexion['fetch'];
$r = $f($r);
return $connexions[$index]; return ($r['valeur'] ? $r['valeur'] : 'utf8');
} }
// http://doc.spip.org/@spip_query // http://doc.spip.org/@spip_query
......
0% Chargement en cours ou .
You are about to add 0 people to the discussion. Proceed with caution.
Veuillez vous inscrire ou vous pour commenter