コード例 #1
0
ファイル: mysql.php プロジェクト: phenix-factory/SPIP
/**
 * Prépare le texte d'une requête avant son exécution
 *
 * Change les préfixes de tables SPIP par ceux véritables
 * 
 * @param string $query     Requête à préparer
 * @param string $db        Nom de la base de donnée
 * @param string $prefixe   Préfixe de tables à appliquer
 * @return string           Requête préparée
 */
function _mysql_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] . _mysql_traite_query($r[2], $db, $prefixe);
            }
            $suite = query_reinjecte_textes($suite, $textes);
        }
    }
    $r = preg_replace(_SQL_PREFIXE_TABLE_MYSQL, '\\1' . $pref, $query) . $suite;
    // en option, remplacer les emoji (que mysql ne sait pas gérer) en 💩
    if (defined('_MYSQL_NOPLANES') and _MYSQL_NOPLANES and lire_meta('charset_sql_connexion') == 'utf8') {
        include_spip('inc/charsets');
        $r = utf8_noplanes($r);
    }
    #spip_log("_mysql_traite_query: " . substr($r,0, 50) . ".... $db, $prefixe", _LOG_DEBUG);
    return $r;
}
コード例 #2
0
ファイル: debusquer.php プロジェクト: JLuc/SPIP
function debusquer_source($objet, $affiche)
{
    $quoi = $GLOBALS['debug_objets'][$affiche][$objet];
    if (!empty($GLOBALS['debug_objets']['boucle'][$objet]->id_boucle)) {
        $nom = $GLOBALS['debug_objets']['boucle'][$objet]->id_boucle;
    } else {
        $nom = $GLOBALS['debug_objets']['sourcefile'][$objet];
    }
    $res2 = "";
    if ($affiche == 'resultat') {
        $legend = $nom;
        $req = $GLOBALS['debug_objets']['requete'][$objet];
        if (function_exists('_mysql_traite_query')) {
            $c = strtolower(_request('connect'));
            $c = $GLOBALS['connexions'][$c ? $c : 0]['prefixe'];
            $req = _mysql_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> => " . spip_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>";
            }
        }
    } elseif ($affiche == 'code') {
        $legend = $nom;
        $res = ancre_texte("<" . "?php\n" . $quoi . "\n?" . ">");
    } elseif ($affiche == 'boucle') {
        $legend = _T('zbug_boucle') . ' ' . $nom;
        // Le compilateur prefixe le nom des boucles par l'extension du fichier source.
        $gram = preg_match('/^([^_]+)_/', $objet, $r) ? $r[1] : '';
        $res = ancre_texte(public_decompiler($quoi, $gram, 0, 'boucle'));
    } elseif ($affiche == 'squelette') {
        $legend = $GLOBALS['debug_objets']['sourcefile'][$objet];
        $res = ancre_texte($GLOBALS['debug_objets']['squelette'][$objet]);
    }
    return array($legend, $res, $res2);
}