361 Stimmen

Text in Feldern in jeder Tabelle einer MySQL-Datenbank suchen

Ich möchte in allen Feldern aus allen Tabellen einer MySQL-Datenbank eine gegebene Zeichenfolge suchen, möglicherweise mit Syntax wie:

SELECT * FROM * WHERE * LIKE '%stuff%'

Ist es möglich, so etwas zu tun?

489voto

Dean Rather Punkte 30466

Sie könnten eine SQLDump der Datenbank (und ihrer Daten) und durchsuchen dann diese Datei.

245voto

Greg Lyon Punkte 2524

Wenn Sie phpMyAdmin installiert haben, verwenden Sie die Funktion "Suchen".

  • Wählen Sie Ihre DB
  • Vergewissern Sie sich, dass Sie eine DB ausgewählt haben (d.h. keine Tabelle, sonst erhalten Sie einen völlig anderen Suchdialog)
  • Klicken Sie auf die Registerkarte 'Suchen'.
  • Wählen Sie den gewünschten Suchbegriff
  • Wählen Sie die zu durchsuchenden Tabellen

Ich habe es für Datenbanken mit bis zu 250 Tabellen/10 GB (auf einem schnellen Server) verwendet, und die Antwortzeit ist einfach unglaublich.

87voto

Milhous Punkte 14201

Sie können einen Blick auf die information_schema Schema. Es enthält eine Liste aller Tabellen und aller Felder, die in einer Tabelle enthalten sind. Mit den Informationen, die Sie aus dieser Tabelle erhalten haben, können Sie dann Abfragen durchführen.

Die betroffenen Tabellen sind SCHEMATA, TABLES und COLUMNS. Es gibt Fremdschlüssel, so dass Sie genau nachvollziehen können, wie die Tabellen in einem Schema erstellt werden.

51voto

Oli Punkte 1554

PHP-Funktion:

function searchAllDB($search){
    global $mysqli;

    $out = Array();

    $sql = "show tables";
    $rs = $mysqli->query($sql);
    if($rs->num_rows > 0){
        while($r = $rs->fetch_array()){
            $table = $r[0];
            $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()){
                    $column = $r2[0];
                    $sql_search_fields[] = "`".$column."` like('%".$mysqli->real_escape_string($search)."%')";
                }
                $rs2->close();
            }
            $sql_search .= implode(" OR ", $sql_search_fields);
            $rs3 = $mysqli->query($sql_search);
            $out[$table] = $rs3->num_rows."\n";
            if($rs3->num_rows > 0){
                $rs3->close();
            }
        }
        $rs->close();
    }

    return $out;
}

print_r(searchAllDB("search string"));

20voto

ardan7779 Punkte 278

Das ist der einfachste Weg, den ich kenne. Wählen Sie Ihre DB in PHPMyAdmin aus, gehen Sie auf die Registerkarte "Suchen" und schreiben Sie, was Sie suchen wollen und wo Sie suchen wollen. Wähle alle Tabellen, wenn du die Wörter in allen Tabellen suchen willst. Dann "GO" und schauen Sie sich das Ergebnis an. I Want to find the word VCD (backdoor) from my Wordpress DB for deleting

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X