/** * @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; }
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); }