Ce Interogare SQL să folosesc pentru o simplă căutare și înlocuire

25 ian. 2011, 13:09:19
Vizualizări: 173K
Voturi: 29

Ori de câte ori creez un site web nou, mai întâi creez un site de test pe un subdomeniu de tipul "stage.domain-name.com".

După ce totul funcționează corect, export baza de date, o deschid în notepad++ și fac o căutare/înlocuire pentru "subdomain.domain-name.com" și o înlocuiesc cu "domain-name.com"... în final o import într-o nouă bază de date pentru site-ul live.

Întrebarea mea este... ce interogare SQL ar trebui să rulez dacă aș dori să fac această simplă căutare/înlocuire în întreaga bază de date folosind phpMyAdmin?

-CH

4
Comentarii

Dacă nu sunteți familiarizat cu interogările, încercați pluginul Search and Replace, http://wordpress.org/extend/plugins/search-and-replace/

t31os t31os
26 ian. 2011 16:19:12

De ce să nu utilizați funcționalitatea WordPress pentru a actualiza URL-ul?

http://codex.wordpress.org/Moving_WordPress detaliază totul

Alex Older Alex Older
18 nov. 2014 17:35:20

Există un plugin pentru asta. Acesta permite utilizarea confortabilă a backend-ului și înlocuiește URL-ul în conținutul postărilor și în alte câmpuri, dacă doriți: https://wordpress.org/plugins/better-search-replace/

simonthesorcerer simonthesorcerer
23 iul. 2015 23:33:19

realizarea acestei operațiuni cu o interogare SQL va corupe orice valori PHP serializate stocate în baza de date, defectând site-ul dacă noul URL are o lungime diferită față de vechiul URL

Tom J Nowell Tom J Nowell
3 sept. 2021 17:03:43
Toate răspunsurile la întrebare 7
7
42

Cele mai bune opțiuni pentru actualizarea opțiunilor, articolelor, conținutului articolelor și metadatelor articolelor:

UPDATE wp_options SET option_value = replace(option_value, 'http://olddomain.com', 'http://newdomain.com') WHERE option_name = 'home' OR option_name = 'siteurl';

UPDATE wp_posts SET guid = replace(guid, 'http://olddomain.com','http://newdomain.com');

UPDATE wp_posts SET post_content = replace(post_content, 'http://olddomain.com', 'http://newdomain.com');

UPDATE wp_postmeta SET meta_value = replace(meta_value, 'http://olddomain.com', 'http://newdomain.com');

De asemenea, consultați Căutarea datelor folosind phpMyAdmin și MySQL | Packt Publishing. Și Search RegEx este un bun plugin WordPress care permite căutarea și înlocuirea cu Grep în toate articolele și paginile.

Actualizare 16.06.2015: Folosirea instrumentului menționat în propoziția următoare este mult mai bună, deoarece o simplă căutare/înlocuire ca mai sus într-un dump al bazei de date va deteriora datele serializate. Consultați interconnectit.com WordPress Serialized PHP Search Replace Tool. În acest fel, nu veți deteriora datele serializate și nu va fi nevoie să rulați RegEx pe conținutul articolelor, deoarece scriptul interconnect schimbă URL-urile peste tot. Folosesc acest instrument tot timpul pentru a migra site-uri pe diferite domenii sau pentru a face o modificare globală de la http la https pentru a forța SSL fără plugin-uri și a schimba toate URL-urile din conținut pentru a preveni erorile de elemente nesecurizate.

Editare 02.09.21 WP CLI este, de asemenea, un instrument excelent și gestionează corect datele serializate. Consultați https://developer.wordpress.org/cli/commands/search-replace/

25 ian. 2011 16:02:41
Comentarii

Nu schimba niciodată guid-ul - chiar dacă treci la un nou domeniu. Este folosit pentru a identifica în mod unic postarea, deoarece ID-ul se poate schimba dacă postările sunt exportate/importate într-o nouă bază de date. Printre altele, cititoarele RSS folosesc GUID-ul pentru a determina dacă un anumit articol a fost citit sau nu. Schimbarea guid-ului va determina republicarea tuturor articolelor tale.

Taylor Dewey Taylor Dewey
16 iun. 2012 20:42:45

@taylordewey a spus: "Nu schimba niciodată guid-ul..." Prostii.

markratledge markratledge
17 iun. 2012 21:55:04

@songdogtech Vrei să explici de ce sunt prostii?

shea shea
6 mar. 2013 06:39:48

Dacă schimbi domeniile, pur și simplu nu ai de ales și trebuie să modifici GUID-urile. Pierderea cititorilor RSS este un preț minim de plătit.

markratledge markratledge
6 nov. 2015 22:20:50

De ce ar trebui cineva neapărat să schimbe GUID-ul?

kaiser kaiser
11 aug. 2016 19:36:48

Chiar dacă GUID-urile conțin un URL, ele nu sunt folosite pentru a crea linkuri (de exemplu în meniuri) atunci când se fac referiri la postări. Prin urmare, a nu le schimba este perfect acceptabil.

Chris Chris
27 mai 2017 15:08:59

Aceasta nu va funcționa pentru date serializate. S-ar putea să distrugă complet unele configurații ale temei. Într-adevăr, folosește un instrument precum cel al Interconnect/IT.

Christian Lescuyer Christian Lescuyer
17 oct. 2017 20:52:24
Arată celelalte 2 comentarii
3
15

Tabelul în care este salvat URL-ul tău este wp_options. Ar trebui să faci o actualizare pe coloanele care folosesc URL-ul pentru site-ul tău:

UPDATE TABLE wp_options SET option_value = "new domain" WHERE option_name = "siteurl"
UPDATE TABLE wp_options SET option_value = "new domain" WHERE option_name = "home"

S-ar putea să fi omis unele valori, dar de fiecare dată când faci acest proces de înlocuire din nou, poți observa valorile și tabelele care ar trebui actualizate și să le adaugi în acest script.

WordPress Codex are un ghid util despre cum să schimbi URL-ul unui site, poate acesta este chiar mai potrivit pentru tine: Schimbarea URL-ului Site-ului

25 ian. 2011 13:25:54
Comentarii

Nu există o metodă de a face înlocuire în întreaga bază de date? Cu alte cuvinte... am observat, de exemplu, că trebuie să înlocuiesc URL-urile în mai multe locații diferite, inclusiv în biblioteca de media... Dacă ar exista o funcție de căutare/înlocuire pentru întreaga bază de date, practic pentru fiecare câmp, aceasta ar rezolva problema. Mulțumesc pentru ajutor.

NetConstructor.com NetConstructor.com
25 ian. 2011 13:28:01

Verifică noul link pe care l-am adăugat în răspuns. Cred că asta ar fi soluția.

Fernando Briano Fernando Briano
25 ian. 2011 13:29:08

Aceasta nu va funcționa pentru datele serializate. S-ar putea să distrugă complet unele configurații ale temei.

Christian Lescuyer Christian Lescuyer
17 oct. 2017 20:52:40
2
10

Acesta este un script excelent pe care îl folosesc și funcționează perfect cu tablourile serializate pe care WordPress le utilizează pentru a stoca opțiunile. Asigurați-vă că îl ștergeți de pe serverul dumneavoastră la distanță când ați terminat, deoarece reprezintă un RISC mare de securitate.

https://interconnectit.com/products/search-and-replace-for-wordpress-databases/

2 aug. 2011 22:47:12
Comentarii

Nu înțeleg de ce am primit -1. Acest script este mult mai bun decât o instrucțiune SQL. Vă rog să-mi dați feedback?

lancemonotone lancemonotone
3 aug. 2011 17:10:14

un instrument pe care îl pot folosi oamenii care nu știu sql, este supărător pentru cei care scriu în sql

Jon Jon
23 iun. 2013 21:54:27
1

Pentru asta folosesc WP-CLI deoarece îl consider cel mai ușor și se ocupă de datele serializate.

wp search-replace 'http://example.dev' 'http://example.com' --skip-columns=guid

Există și o opțiune care scrie modificările într-un fișier SQL în loc să manipuleze direct baza de date:

wp search-replace foo bar --export=database.sql

27 apr. 2016 11:41:58
Comentarii

de departe cea mai robustă și rapidă soluție. wp-cli salvează ziua încă o dată

ryanrain ryanrain
19 iun. 2018 21:02:26
3

nu trebuie să faci asta, poți folosi căi relative.

când legi ceva în loc de subdomeniu.site.com/imag.jpg - folosește /imag.jpg de exemplu

în felul acesta nu vei întâmpina problema de la început.

altfel pentru o instrucțiune mysql update poți folosi

update TABLE_NAME set FIELD_NAME = replace(FIELD_NAME, ‘find this string’, ‘replace found string with this string’);
25 ian. 2011 13:45:36
Comentarii

Mulțumesc... da, voi face asta data viitoare. Instrucțiunea SQL efectuează o înlocuire în întreaga bază de date (inclusiv toate tabelele)?

NetConstructor.com NetConstructor.com
25 ian. 2011 14:03:52

@NetConstructor.com Instrucțiunea SQL pe care ți-a furnizat-o mireille mai sus este comanda generică MySQL pentru înlocuirea unui șir de caractere într-un câmp specific dintr-un tabel specific. Dacă ai încerca să rulezi această instrucțiune exact așa cum a fost scrisă, nu ar funcționa. Pentru ca această comandă să funcționeze, ar trebui să modifici TABLE_NAME & FIELD_NAME cu un câmp și tabel real utilizate de WordPress.

Manzabar Manzabar
26 ian. 2011 05:15:06

De asemenea, reține că chiar dacă dorești să utilizezi căi relative, multe părți din WordPress au tendința de a insera automat căi absolute. Pentru a obține acest lucru, un plugin precum: https://wordpress.org/plugins/root-relative-urls/ este foarte, foarte util

benz001 benz001
15 sept. 2014 08:03:09
1

Pentru a schimba domeniul WordPress, ceea ce avem adesea nevoie, poate fi pentru a face site-ul live de pe localhost: Aceasta este o listă completă de interogări de actualizare:

UPDATE wp_posts SET guid = replace(guid, 'http://olddomain.com','http://newdomain.com');
UPDATE wp_posts SET post_content = replace(post_content, 'http://olddomain.com', 'http://newdomain.com');
UPDATE wp_links SET link_url = replace(link_url, 'http://olddomain.com', 'http://newdomain.com');
UPDATE wp_links SET link_image = replace(link_image, 'http://olddomain.com', 'http://newdomain.com');
UPDATE wp_postmeta SET meta_value = replace(meta_value, 'http://olddomain.com', 'http://newdomain.com');
UPDATE wp_usermeta SET meta_value = replace(meta_value, 'http://olddomain.com', 'http://newdomain.com');

/*UPDATE wp_options SET option_value = replace(option_value, 'http://olddomain.com', 'http://newdomain.com') WHERE option_name = 'home' OR option_name = 'siteurl' OR option_name = 'widget_text' OR option_name = 'dashboard_widget_options';*/
UPDATE wp_options SET option_value = replace(option_value, 'http://olddomain.com', 'http://newdomain.com');
  • Trebuie să adăugăm și alte tabele care nu sunt implicite în WP dacă este necesar.

ACTUALIZARE: Search Replace DB versiunea 3.1.0 este un instrument prietenos pentru dezvoltatori, care vă permite să efectuați căutări/înlocuiri în întreaga bază de date, fără a deteriora șirurile sau obiectele PHP serializate.

24 nov. 2011 18:09:00
Comentarii

Acest lucru nu va funcționa pentru datele serializate. S-ar putea să distrugă complet configurația temei.

Christian Lescuyer Christian Lescuyer
17 oct. 2017 20:50:59
1
-2

De fapt, nu este nevoie să folosești o interogare SQL, ci doar câteva ajustări în fișierele wp_config.php și functions.php din tema ta. Verifică acest subiect în Wordpress Codex: https://codex.wordpress.org/Changing_The_Site_URL

6 mai 2015 14:10:22
Comentarii

Acest lucru nu este corect. Din păcate, WordPress stochează unele URL-uri în baza de date ca text.

s_ha_dum s_ha_dum
30 sept. 2015 17:03:25