X-Git-Url: http://git.cyclocoop.org/?a=blobdiff_plain;f=www%2Fecrire%2Freq%2Fmysql.php;h=89d66fae3bba8f7e74eb19f4210a017045e18eb8;hb=cc641eb476987612f6d6df1a5417c1c5582a8ab8;hp=3532ea15f6db9a3a5409cb555f1bfc0b33d0fa2d;hpb=a33c2ba9d919664b3bb0f565f8e9a8b9d8530cdb;p=lhc%2Fweb%2Fclavette_www.git diff --git a/www/ecrire/req/mysql.php b/www/ecrire/req/mysql.php index 3532ea1..89d66fa 100644 --- a/www/ecrire/req/mysql.php +++ b/www/ecrire/req/mysql.php @@ -3,7 +3,7 @@ /* *************************************************************************\ * SPIP, Systeme de publication pour l'internet * * * - * Copyright (c) 2001-2014 * + * Copyright (c) 2001-2016 * * Arnaud Martin, Antoine Pitrou, Philippe Riviere, Emmanuel Saint-James * * * * Ce programme est un logiciel libre distribue sous licence GNU/GPL. * @@ -112,28 +112,29 @@ $GLOBALS['spip_mysql_functions_1'] = array( 'utf-8'=>array('charset'=>'utf8','collation'=>'utf8_general_ci')) ); -// http://doc.spip.org/@spip_mysql_set_charset + /** - * @param $charset - * @param string $serveur - * @param bool $requeter - * @param bool $requeter - * @return resource + * Définit un charset pour la connexion avec Mysql + * + * @param string $charset Charset à appliquer + * @param string $serveur Nom de la connexion + * @param bool $requeter inutilisé + * @return resource Ressource de résultats pour fetch() */ -function spip_mysql_set_charset($charset, $serveur='',$requeter=true,$requeter=true){ +function spip_mysql_set_charset($charset, $serveur='',$requeter=true){ $connexion = &$GLOBALS['connexions'][$serveur ? strtolower($serveur) : 0]; spip_log("changement de charset sql : "."SET NAMES "._q($charset), _LOG_DEBUG); return mysql_query($connexion['last'] = "SET NAMES "._q($charset)); } -// http://doc.spip.org/@spip_mysql_get_charset -/** - * @param array $charset - * @param string $serveur - * @param bool $requeter - * @return array - * +/** + * Teste si le charset indiqué est disponible sur le serveur SQL + * + * @param array|string $charset Nom du charset à tester. + * @param string $serveur Nom de la connexion + * @param bool $requeter inutilisé + * @return array Description du charset (son nom est dans 'charset') */ function spip_mysql_get_charset($charset=array(), $serveur='',$requeter=true){ $connexion = &$GLOBALS['connexions'][$serveur ? strtolower($serveur) : 0]; @@ -182,12 +183,12 @@ function spip_mysql_query($query, $serveur='',$requeter=true) { // ajouter un debug utile dans log/mysql-slow.log ? $debug = ''; if (defined('_DEBUG_SLOW_QUERIES') AND _DEBUG_SLOW_QUERIES){ - if($GLOBALS['debug']['aucasou']){ + if(isset($GLOBALS['debug']['aucasou'])){ list(,$id,, $infos) = $GLOBALS['debug']['aucasou']; - $debug .= " BOUCLE$id @ ".$infos[0] ." | "; + $debug .= "BOUCLE$id @ ".$infos[0] ." | "; } - $debug .= " " . $_SERVER['REQUEST_URI'].' + '.$GLOBALS['ip']; - $debug = ' /*'.str_replace('*/','@/',$debug).' */'; + $debug .= $_SERVER['REQUEST_URI'].' + '.$GLOBALS['ip']; + $debug = ' /* '. mysql_real_escape_string(str_replace('*/','@/',$debug)). ' */'; } $r = $link ? mysql_query($query.$debug, $link) : mysql_query($query.$debug); @@ -486,9 +487,9 @@ function spip_mysql_create($nom, $champs, $cles, $autoinc=false, $temporary=fals return; $res = spip_mysql_query("SELECT version() as v"); - if ($row = mysql_fetch_array($res) - && (version_compare($row['v'],'5.0','>='))) - spip_mysql_query("SET sql_mode=''"); + if (($row = mysql_fetch_array($res)) && (version_compare($row['v'],'5.0','>='))) { + spip_mysql_query("SET sql_mode=''", $serveur); + } foreach($cles as $k => $v) { $keys .= "$s\n\t\t$k ($v)"; @@ -639,6 +640,7 @@ function spip_mysql_repair($table, $serveur='',$requeter=true) return spip_mysql_query("REPAIR TABLE `$table`", $serveur, $requeter); } +define('_MYSQL_RE_SHOW_TABLE', '/^[^(),]*\(((?:[^()]*\((?:[^()]*\([^()]*\))?[^()]*\)[^()]*)*[^()]*)\)[^()]*$/'); // Recupere la definition d'une table ou d'une vue MySQL // colonnes, indexes, etc. // au meme format que la definition des tables de SPIP @@ -656,11 +658,11 @@ function spip_mysql_showtable($nom_table, $serveur='',$requeter=true) if (!$requeter) return $s; list(,$a) = mysql_fetch_array($s ,MYSQL_NUM); - if (preg_match("/^[^(),]*\((([^()]*\([^()]*\)[^()]*)*)\)[^()]*$/", $a, $r)){ + if (preg_match(_MYSQL_RE_SHOW_TABLE, $a, $r)){ $desc = $r[1]; // extraction d'une KEY éventuelle en prenant garde de ne pas // relever un champ dont le nom contient KEY (ex. ID_WHISKEY) - if (preg_match("/^(.*?),([^,]*KEY[ (].*)$/s", $desc, $r)) { + if (preg_match("/^(.*?),([^,]*\sKEY[ (].*)$/s", $desc, $r)) { $namedkeys = $r[2]; $desc = $r[1]; } @@ -674,8 +676,8 @@ function spip_mysql_showtable($nom_table, $serveur='',$requeter=true) } $keys = array(); - foreach(preg_split('/\)\s*,?/',$namedkeys) as $v) { - if (preg_match("/^\s*([^(]*)\((.*)$/",$v,$r)) { + foreach(preg_split('/\)\s*(,|$)/',$namedkeys) as $v) { + if (preg_match("/^\s*([^(]*)\(([^(]*(\(\d+\))?)$/",$v,$r)) { $k = str_replace("`", '', trim($r[1])); $t = strtolower(str_replace("`", '', $r[2])); if ($k && !isset($keys[$k])) $keys[$k] = $t; else $keys[] = $t;