Wie kann ich eine URL in einem Feld in MySQL ändern?

Lesezeit: 5 Minuten

Ich habe eine Tabelle namens “wp-posts” mit einem Feld “post-content”. Dieses Feld enthält den Text für einen Blogbeitrag. Ich möchte alle Datensätze ändern, um eine URL durch eine andere zu ersetzen.

Stellen Sie sich vor, ich könnte Dinge haben wie:

Dies ist ein Test und irgendwo steht so etwas wie oldurl.com/etwas”>einen Link.”

Ich möchte, dass es so ist

Dies ist ein Test und irgendwo steht so etwas wie newurl.com/etwas”>einen Link.”

Ich muss dies für jeden Datensatz in meiner Tabelle ändern können, ohne jeden Beitrag in WordPress öffnen und von Hand ändern zu müssen. Es muss einen Weg geben, dies zu tun

Dies kann leicht mit einer einfachen SQL-Anweisung unter Verwendung von MySQL erreicht werden replace() Funktion. Bevor wir das tun, sollten Sie auf jeden Fall einen Datenbank-Dump oder was auch immer Sie für Backups verwenden, erstellen. Es ist nicht nur The Right Thing To Do™, sondern wenn Sie bei Ihrer Ersetzung einen Fehler machen, kann es sich als schwierig erweisen, ihn rückgängig zu machen (ja, Sie könnten einen Rollback durchführen, aber Sie werden Ihren Fehler möglicherweise erst später herausfinden).

Um einen Datenbank-Dump von MySQL zu erstellen, können Sie so etwas ausführen —

mysqldump -h hostname -u username -p databasename > my_sql_dump.sql

Wo (und das wissen Sie wahrscheinlich, aber der Vollständigkeit halber für zukünftige Generationen…) —

  • Hostname ist ein Platzhalter für den Hostnamen der Datenbank. Wenn der Datenbankserver auf Ihrem eigenen Rechner läuft, können Sie entweder „localhost“ verwenden oder das „-h hostname“ einfach ganz weglassen
  • Nutzername ist ein Platzhalter für den Benutzer mit der Berechtigung, einen Dump auf der Datenbank auszuführen. Dies ist oft ein Administrator, aber wenn es sich um eine gemeinsam genutzte Datenbank handelt, könnten Sie es einfach sein.
  • Name der Datenbank ist der Name der gesamten Datenbank, die Ihre Tabellen enthält. (Beachten Sie, dass das „-p“ nichts mit diesem Datenbanknamen zu tun hat. „-p“ zeigt an, dass MySQL Sie nach einem Passwort fragen soll, um sich anzumelden.)

Jetzt, da wir das aus dem Weg geräumt haben, können Sie sich bei der MySQL-Datenbank anmelden mit:

mysql -h hostname -u username -p databasename

Und führen Sie einfach diese Anweisung aus:

UPDATE `wp-posts` SET `post-content` = REPLACE(`post-content`, "http://oldurl.com", "http://newurl.com");

Und das sollte es tun!

Wenn Sie einen Fehler machen, können Sie die Anweisung oft erneut ausführen, wobei der ursprüngliche und der neue Text vertauscht sind (wenn der neue Text – in Ihrem Fall die neue URL – nicht bereits im Text vorhanden war, bevor Sie die Ersetzung vorgenommen haben). Manchmal Dies ist nicht möglich, je nachdem, wie der neue Text lautete (wiederum in Ihrem Fall nicht wahrscheinlich). Auf jeden Fall können Sie jederzeit versuchen, den SQL-Dump wiederherzustellen —

cat my_sql_dump.sql | mysql -h hostname -u username -p databasename

Und voilà.

  • Lief wie am Schnürchen! Vielen Dank!!! Und danke für die ausführliche Anleitung! Ich liebe Stack Overflow jetzt!

    – Jérôme Elkins

    9. Juni 2009 um 14:42 Uhr

  • Nur fürs Protokoll, für den Fall, dass jemand hierher kommt und blind und mutig (nein, abenteuerlich!) diese Abfrage kopieren und einfügen möchte, wp-posts wird sein wp_posts und beide post-contents wird sein post_content.

    – Adam Rowe

    3. Mai 2017 um 13:07 Uhr

Verwenden Sie die Zeichenfolgenfunktion ersetzen bei mysql:

UPDATE MyTable SET textfield = REPLACE(textfield, "http://oldurl.com/", "http://newurl.com")

Es gibt ein praktisches WordPress-Plugin, das ich zum Suchen und Ersetzen in Beitragsseiten mit grep verwendet habe:

http://urbangiraffe.com/plugins/search-regex/

Ich habe kürzlich verwendet http://wordpress.org/extend/plugins/search-and-replace/ um eine Site von einem Entwicklungsserver auf den öffentlichen Server zu aktualisieren. Ich habe das Plugin verwendet, um alle URLs von Bildern von ihrem “00.00.00.00/~user/” in ihr “example.com”-Format zu ändern.

Es funktionierte perfekt.

Stellen Sie natürlich sicher, dass Sie zuerst die Datenbank sichern, falls Sie während des Vorgangs einen Tippfehler machen.

Es gibt ein paar Stellen, an denen das geklärt werden kann.

  1. Sichern Sie Ihre Datenbank
  2. Versuchen Sie, das interne Dienstprogramm von WordPress zu verwenden
  3. Suchen Sie nach Übereinstimmungen
  4. Schreiben Sie Ihr eigenes Suchen und Ersetzen

Verfahren

1. Sichern Sie Ihre Datenbank

Ich gehe generell so vor:

mysqldump -u dbuser -p'dbpassword' --complete-insert --default-character-set=utf8 databasename > /home/renoirb/backups/databasename.sql

Ich habe dies sogar in einer Crontab auf meinem eigenen Server. Aber das ist ein anderes Thema.

2. Versuchen Sie, das interne Dienstprogramm von WordPress zu verwenden

WordPress hat für diese Angelegenheit ein eigenes Dienstprogramm. Meistens geht es nur damit.

Fügen Sie einfach zu Ihrem Thema hinzu functions.php (siehe WordPress-Dokumentation) Datei die folgende Zeile:

update_option('siteurl','http://local.workspace/');
update_option('home','http://local.workspace/');

Angenommen, Sie führen bereits das Thema aus, das diese Besonderheit hat functions.php Datei.

Führen Sie die Site aus, indem Sie die Seite aktualisieren.

Dann kommentiere die Zeilen!

Du wirst sie nicht mehr brauchen.

Andernfalls müssen sie Ihre Datenbankkonfiguration bei jedem Seitenladen aktualisieren.

Wenn es nicht genug ist, fahren Sie fort …

3. Suchen Sie nach Übereinstimmungen

Ich persönlich benutze Administrator Bei meiner Bereitstellung ist es ein einfacher Ersatz für PHPMyAdmin mit einer Datei.

Warum ich vorschlage Administrator? Es hat eine nette Funktion zum Durchsuchen aller Datenbanken, die ich in unserem Anwendungsfall recht praktisch finde.

Es ist ein Suchfeld mit der Bezeichnung: “Suche in Datentabellen”.

4. Schreiben Sie Ihr eigenes Suchen und Ersetzen

UPDATE `wp_comments` SET `comment_author_url` = REPLACE(`comment_author_url`, "http://url", "https://url");
UPDATE `wp_postmeta` SET `meta_value` = REPLACE(`meta_value`, "http://url", "https://url");
UPDATE `wp_options` SET `option_value` = REPLACE(`option_value`, "http://url", "https://url");

Beachten Sie, dass ich in meinem Fall ALLE meine URLs von NON HTTPS zu HTTPS migriert habe.

Hoffe das war hilfreich

1365660cookie-checkWie kann ich eine URL in einem Feld in MySQL ändern?

This website is using cookies to improve the user-friendliness. You agree by using the website further.

Privacy policy