Valider 28107bdf rédigé par esj's avatar esj
Parcourir les fichiers

Bug anté-diluvien remontant à la surface suite à l'optimisation du cache des...

Bug anté-diluvien remontant à la surface suite à l'optimisation du cache des metas de [10427]: la meta charset_sql_connexion n'est pas toujours connue au moment de la connexion au serveur SQL, et cette situation apparaît beaucoup plus souvent à présent. On prend la valeur par défaut '''utf8''' (sans tiret en MySQL), standard de SPIP à présent, plutôt que de l'iso standard de MySQL. Cette solution reste insatisfaisante cependant, et ne règle pas non plus le pb des extensions mettant dans les metas d'autres valeurs nécessaires à la connexion initiale. A améliorer donc.
parent e629241a
Chargement en cours
Chargement en cours
Chargement en cours
Chargement en cours
+3 −2
Numéro de ligne d'origine Numéro de ligne de diff Ligne de diff
@@ -26,8 +26,9 @@ function base_db_mysql_dist($host, $port, $login, $pass, $db='', $prefixe='') {
		$ok = spip_mysql_selectdb($db);
		if (defined('_MYSQL_SQL_MODE_TEXT_NOT_NULL'))
			mysql_query("set sql_mode=''");
		if (isset($GLOBALS['meta']['charset_sql_connexion']))
			mysql_query("SET NAMES "._q($GLOBALS['meta']['charset_sql_connexion']));
		$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 "
#		 . ($ok ? "operationnelle sur $link" : 'impossible'));
+0 −1
Numéro de ligne d'origine Numéro de ligne de diff Ligne de diff
@@ -77,7 +77,6 @@ function serie_upgrade($serie, $q = array()) {
			spip_log("etape $i: ".$req);
			spip_query($req);
			ecrire_meta('upgrade_etape_'.$serie, $i+1);
			ecrire_metas();
		}
	}
	effacer_meta('upgrade_etape_'.$serie);
+9 −7
Numéro de ligne d'origine Numéro de ligne de diff Ligne de diff
@@ -35,13 +35,15 @@ function lire_metas() {
function ecrire_meta($nom, $valeur, $importable = NULL) {
	if (!$nom) return;
	$GLOBALS['meta'][$nom] = $valeur;

	if (!_FILE_CONNECT && !@file_exists(_FILE_CONNECT_INS .'.php')) return;
	$r = spip_query("SELECT impt FROM spip_meta WHERE nom=" . _q($nom));
	$r = sql_fetch($r);
	$res = sql_fetsel("impt,valeur", 'spip_meta', "nom=" . _q($nom));
	// conserver la valeur de impt si existante
	if ($r) {
	// et ne pas detruire le cache si affectation a l'identique
	if ($res) {
		if ($valeur == $res['valeur']) return;
		$r = ($importable === NULL) ? ''
		    : ", impt=" .  _q($importable);
		: (", impt=" .  _q($importable));
		spip_query("UPDATE spip_meta SET valeur=" . _q($valeur) ."$r WHERE nom=" . _q($nom) );
	} else
		spip_query("INSERT INTO spip_meta (nom,valeur,impt) VALUES (" .  _q($nom) . "," . _q($valeur) ."," .  _q($importable) . ')');