340 votes

MySQL - recherche dans tous les champs de chaque table d’une base de données

Je sais qu’il n’est probablement pas possible de faire cela, mais je veux juste vérifier avec vous, les gars... Est-il possible de faire quelque chose comme ça, à l’aide de MySQL ? Je veux Rechercher dans tous les domaines de toutes les tables d’une chaîne donnée :

472voto

Dean Rather Points 7856

Vous pourriez faire une SQLDump de la base de données (et ses données) puis Rechercher ce fichier.

232voto

Greg Lyon Points 541

Si vous avez phpMyAdmin installé utiliser sa fonctionnalité de « Recherche ».

  • Sélectionnez votre DB
  • Veillez à ce que vous n’avez pas besoin d’une base de données sélectionné (c'est-à-dire pas une table, sinon vous obtiendrez une boîte de dialogue de recherche complètement différente)
  • Cliquez sur « Recherche » onglet
  • Choisir le terme de recherche souhaitée
  • Choisissez les tables de recherche

J’ai utilisé ce jusqu'à 250 bases de table/10Go (sur un serveur rapide) et le temps de réponse est tout simplement incroyable.

85voto

Milhous Points 6362

vous pouvez lire dans la table information_schema. Il a une liste de toutes les tables et tous les champs qui figurent dans la table. Vous pouvez alors exécuter queiries en utilisant les informations que vous avez obtenu à partir de ce tableau.

49voto

Olivier Points 622
function searchAllDB($search){
    global $mysqli;

    $out = "";

    $sql = "show tables";
    $rs = $mysqli->query($sql);
    if($rs->num_rows > 0){
        while($r = $rs->fetch_array()){
            $table = $r[0];
            $out .= $table.";";
            $sql_search = "select * from ".$table." where ";
            $sql_search_fields = Array();
            $sql2 = "SHOW COLUMNS FROM ".$table;
            $rs2 = $mysqli->query($sql2);
            if($rs2->num_rows > 0){
                while($r2 = $rs2->fetch_array()){
                    $colum = $r2[0];
                    $sql_search_fields[] = $colum." like('%".$search."%')";
                }
                $rs2->close();
            }
            $sql_search .= implode(" OR ", $sql_search_fields);
            $rs3 = $mysqli->query($sql_search);
            $out .= $rs3->num_rows."\n";
            if($rs3->num_rows > 0){
                $rs3->close();
            }
        }
        $rs->close();
    }

    return $out;
}

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X