X-Git-Url: http://git.cyclocoop.org/?p=velocampus%2Fweb%2Fwww.git;a=blobdiff_plain;f=www%2Fecrire%2Freq%2Fmysql.php;h=18a27ca2c9020b1185bcfddfe005745f814f364a;hp=191ba968efe8207672297de1c281a7eb14bdaa6c;hb=e99f0878011913365e49b30d90e496c24c301393;hpb=80b4d3e85f78d402ed2e73f8f5d1bf4c19962eed diff --git a/www/ecrire/req/mysql.php b/www/ecrire/req/mysql.php index 191ba96..18a27ca 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-2011 * + * Copyright (c) 2001-2014 * * Arnaud Martin, Antoine Pitrou, Philippe Riviere, Emmanuel Saint-James * * * * Ce programme est un logiciel libre distribue sous licence GNU/GPL. * @@ -139,7 +139,17 @@ function spip_mysql_query($query, $serveur='',$requeter=true) { } else $t = 0 ; $connexion['last'] = $query; - $r = $link ? mysql_query($query, $link) : mysql_query($query); + + // ajouter un debug utile dans log/mysql-slow.log ? + $debug = (!defined('_DEBUG_SLOW_QUERIES') || !_DEBUG_SLOW_QUERIES) + ? '' + : ' /* ' + .str_replace('*/','@/', + $_SERVER['REQUEST_URI'].' + '.$GLOBALS['ip'] + ) + .' */'; + + $r = $link ? mysql_query($query.$debug, $link) : mysql_query($query.$debug); if ($e = spip_mysql_errno($serveur)) // Log de l'erreur eventuelle $e .= spip_mysql_error($query, $serveur); // et du fautif @@ -291,8 +301,14 @@ function traite_query($query, $db='', $prefixe='') { } else { $suite = strstr($query, $regs[0]); $query = substr($query, 0, -strlen($suite)); - if (preg_match('/^(.*?)([(]\s*SELECT\b.*)$/si', $suite, $r)) { - $suite = $r[1] . traite_query($r[2], $db, $prefixe); + // propager le prefixe en cas de requete imbriquee + // il faut alors echapper les chaine avant de le faire, pour ne pas risquer de + // modifier une requete qui est en fait juste du texte dans un champ + if (strpos(strtoupper($suite),"SELECT")!==false) { + list($suite,$textes) = query_echappe_textes($suite); + if (preg_match('/^(.*?)([(]\s*SELECT\b.*)$/si', $suite, $r)) + $suite = $r[1] . traite_query($r[2], $db, $prefixe); + $suite = query_reinjecte_textes($suite, $textes); } } $r = preg_replace(_SQL_PREFIXE_TABLE, '\1'.$pref, $query) . $suite; @@ -314,7 +330,8 @@ function spip_mysql_selectdb($db) { // http://doc.spip.org/@spip_mysql_listdbs function spip_mysql_listdbs($serveur='',$requeter=true) { - return @mysql_list_dbs(); + $res = spip_mysql_query("SHOW DATABASES"); + return $res; } // Fonction de creation d'une table SQL nommee $nom @@ -397,7 +414,8 @@ function spip_mysql_create_view($nom, $query_select, $serveur='',$requeter=true) function spip_mysql_drop_table($table, $exist='', $serveur='',$requeter=true) { if ($exist) $exist =" IF EXISTS"; - return spip_mysql_query("DROP TABLE$exist `$table`", $serveur, $requeter); + if (!preg_match('@^\w+$@', $table)) $table = "`$table`"; + return spip_mysql_query("DROP TABLE$exist $table", $serveur, $requeter); } // supprime une vue @@ -416,7 +434,8 @@ function spip_mysql_showbase($match, $serveur='',$requeter=true) // http://doc.spip.org/@spip_mysql_repair function spip_mysql_repair($table, $serveur='',$requeter=true) { - return spip_mysql_query("REPAIR TABLE `$table`", $serveur, $requeter); + if (!preg_match('@^\w+$@', $table)) $table = "`$table`"; + return spip_mysql_query("REPAIR TABLE $table", $serveur, $requeter); } // Recupere la definition d'une table ou d'une vue MySQL