Example #1
0
/**
 * @param $query
 * @param string $db
 * @param string $prefixe
 * @return array|null|string
 */
function traite_query($query, $db = '', $prefixe = '')
{
    if ($GLOBALS['mysql_rappel_nom_base'] and $db) {
        $pref = '`' . $db . '`.';
    } else {
        $pref = '';
    }
    if ($prefixe) {
        $pref .= $prefixe . "_";
    }
    if (!preg_match('/\\s(SET|VALUES|WHERE|DATABASE)\\s/i', $query, $regs)) {
        $suite = '';
    } else {
        $suite = strstr($query, $regs[0]);
        $query = substr($query, 0, -strlen($suite));
        // 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 (stripos($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;
    #spip_log("traite_query: " . substr($r,0, 50) . ".... $db, $prefixe", _LOG_DEBUG);
    return $r;
}
Example #2
0
function debusquer_source($objet, $affiche)
{
	$quoi = $GLOBALS['debug_objets'][$affiche][$objet];
	$nom =  $GLOBALS['debug_objets']['boucle'][$objet]->id_boucle;
	$res2 = "";

	if ($affiche == 'resultat') {
		$legend = $nom;
		$req = $GLOBALS['debug_objets']['requete'][$objet];
		if (function_exists('traite_query')) {
		  $c = strtolower(_request('connect'));
		  $c = $GLOBALS['connexions'][$c ? $c : 0]['prefixe'];
		  $req = traite_query($req,'', $c);
		}
		//  permettre le copier/coller facile
		// $res = ancre_texte($req, array(), true);
		$res = "<div id='T".md5($req)."'>\n<pre>\n" . $req . "</pre>\n</div>\n";
		//  formatage et affichage des resultats bruts de la requete
		$ress_req = spip_query($req);
		$brut_sql = '';
		$num = 1;
		//  eviter l'affichage de milliers de lignes
		//  personnalisation possible dans mes_options
		$max_aff = defined('_MAX_DEBUG_AFF') ? _MAX_DEBUG_AFF : 50;
		while ($retours_sql = sql_fetch($ress_req)) {
			if ($num <= $max_aff) {
				$brut_sql .= "<h3>" .($num == 1 ? $num. " sur " .sql_count($ress_req):$num). "</h3>";
				$brut_sql .= "<p>";
				foreach ($retours_sql as $key => $val) {
					$brut_sql .= "<strong>" .$key. "</strong> => " .htmlspecialchars(couper($val, 150)). "<br />\n";
				}
				$brut_sql .= "</p>";
			}
			$num++;
		}
		$res2 = interdire_scripts($brut_sql);
		foreach ($quoi as $view) {
			//  ne pas afficher les $contexte_inclus
			$view = preg_replace(",<\?php.+\?[>],Uims", "", $view);
			if ($view) {
				$res2 .= "\n<br /><fieldset>" .interdire_scripts($view). "</fieldset>";
			}
		}

	} else if ($affiche == 'code') {
		$legend = $nom;
		$res = ancre_texte("<"."?php\n".$quoi."\n?".">");
	} else if ($affiche == 'boucle') {
		$legend = _T('boucle') . ' ' .  $nom;
		$res = ancre_texte(decompiler_boucle($quoi));
	} else if ($affiche == 'squelette') {
		$legend = $GLOBALS['debug_objets']['sourcefile'][$objet];
		$res = ancre_texte($GLOBALS['debug_objets']['squelette'][$objet]);
	}

	return array($legend, $res, $res2);
}