Blog

Suchen & Ersetzen in MySQL Datenbank in mehreren Tabellen

Suchen & Ersetzen in MySQL Datenbank in mehreren Tabellen

Heute stand ich vor dem Problem, eine Firmenbezeichnung und auf einer Website, die mit dem CMS Contao läuft, auszutauschen. Ich sah mich schon stundenlang Texte im Frontend durchsuchen und dann mühsam im Backend Artikel öffnen und Textstellen von Hand ersetzen. Das konnte es nicht sein.

Das Problem ist ja nicht neu und daher gibt es schon verschiedene Lösungen im Web, von denen ich nur auf die Dritte und meiner Meinung nach Beste näher eingehen werde:

1. Möglichkeit: Wenn man weiss, in welcher Tabelle und in welchem Feld sich der zu ändernde Text befindet, lassen sich Strings mit diesem SQL -Befehl ersetzen, den man z. Bsp. in phpMyAdmin eingibt:

UPDATE [Tabellenname] SET [Spaltenname] = REPLACE([Spaltenname], 'Suchwort', 'Ersetzung')

Das Problem ist, dass man zuerst herausfinden muss, in welchen Tabellenund Feldern der gesuchte Begriff enthalten ist. Dann muss für jede Tabelle dieser Befehl geschrieben werden.
Viel Arbeit, wenn man mehrere Fundstellen über viele Tabellen verstreut hat.

2. Möglichkeit: Download/Upload

Die Datenbank herunterladen, auf dem lokalen Rechner ein Suchen & Ersetzen ausführen und das Ganze wieder importieren. Ist bei grösseren Datenbanken auch nicht ganz optimal.

3. Möglichkeit: Mit einem PHP Script

Dieses PHP-Script auf github gists von Leo Feyer durchsucht die Datenbank global und alle Fundstellen werden direkt ersetzt. Es müssen die Datenbankzugangsdaten eingetragen werden und der alte und neue Begriff. ( In meinem Beispiel läuft die Seite mit dem CMS Contao 3 und einer MySQL Datenbank Version 5.)

Update (2023): Das PHP-Script funktioniert u. U. in aktuellen Contaoversionen nicht mehr. Es gibt aber folgende Erweiterung, die auch gute Dienste beim Suchen und Ersetzen leistet:
https://github.com/heimrichhannot/contao-replace-bundle

Wie wendet man das Script an

Schritt 1

Ein Backup der Datenbank machen!
Das sollte man aus Sicherheitsgründen immer machen, wenn man an der DB "schraubt" aber ich schätze, das wisst Ihr sowieso schon ;-)

Schritt 2

Das PHP Script kopieren und in einer Datei speichern. Zum Beispiel "db-suche.php".
Die DB Zugangsdaten in den Zeilen 4 bis 7 eintragen.

Den zu suchenden Begriff in Zeile 10 eingeben und eine Zeile tiefer den neuen Begriff eintragen.

phpscript
Nur die pink markierten Stellen müssen durch eigene Einträge ersetzt werden
ergebnisseite

Achtung bei Sonderzeichen wie "&" etc.. Wenn Sie in der Datenbank "escaped", also mit eckigen Klammern aussenrum eingetragen sind, muss der Begriff auch so im PHP Script stehen, sonst wird er nicht gefunden.

Achtung auch bei Rechtschreibfehlern, fehlenden Leerzeichen, Gross-/Kleinschreibung usw. - die werden natürlich auch nicht gefunden und nicht ersetzt. ("A und B" findet nicht "A undB" und "Firma" findet nicht "firma"..)

Schritt 3

Die erstellte php-Datei auf den Server hochladen, wo auch die Website liegt.

Schritt 4

Die php-Datei im Browser aufrufen. (z. Bsp. : meine-domain.ch/db-suche.php)

Das Script fragt nicht, ob die Fundstellen auch wirklich ersetzt werden sollen, sondern es sucht und ersetzt in einem Schritt, sobald es aufgerufen wird.

Es erscheint fast sofort die Ergebnisseite, die anzeigt, welche Tabellen verarbeitet wurden und ganz am Ende wieviele Fundstellen ersetzt wurden. (Im Beispiel unten wurden 288 Fundstellen ersetzt.)
Dann nachsehen, ob alles wie gewünscht ersetzt wurde - ggf. den Browsercache leeren.

Falls nicht alle Begriffe ersetzt wurden

mySQL Suche
Suche in der DB

Wenn der Begriff nicht immer gleich geschrieben wurde, kann es sein, dass sich trotzdem noch "Fundstellen" finden.
Sollten z. Bsp. alle "Firma GmbH & Co. KG" ersetzt werden, wurde "Firma GmbH & Co KG" natürlich nicht ersetzt. Der Unterschied liegt nur an einem winzigkleinen "." hinter dem "Co", der beim Korrekturlesen der Website übersehen wurde. Dann einfach nochmal nur nach "Firma GmbH" suchen, damit die Relevanz erweitert wird.

Um zu testen, ob evtl. noch irgendwelche falschgeschriebenen Varianten des zu ersetzenden Begriffs in der Website vorkommen, kann man die Datenbank z. Bsp. in phpMyAdmin (ein weitverbreitetes mySQL Administrationstool) durchsuchen.

Dazu ins Backend von phpMyAdmin einloggen und die Datenbank auswählen (Wichtig! Wenn man nur eine Tabelle ausgewählt hat, sieht die Suche-Ansicht ganz anders aus..)

Dann im Reiter oben auf "Suche" klicken, den Suchbefriff eingeben, alle (!) auswählen anklicken und auf OK klicken.
Es wird eine Liste mit allen Tabellen ausgegeben, in denen sich der Suchbegriff noch befindet und auch wie oft er vorkommt.

Wenn der Beitrag hilfreich war, freue ich mich sehr, wenn Sie ihn in Ihrem Lieblings-Socialnetwork teilen.

Zurück