Quale Query SQL utilizzare per una semplice ricerca e sostituzione

25 gen 2011, 13:09:19
Visualizzazioni: 173K
Voti: 29

Ogni volta che creo un nuovo sito web, prima creo un sito di staging su un sottodominio come "stage.domain-name.com".

Dopo che tutto funziona correttamente, esporto il database, lo apro in notepad++ e faccio una ricerca/sostituzione di "subdomain.domain-name.com" sostituendolo con "domain-name.com"... infine lo importo in un nuovo database per il sito live.

La mia domanda è... quale query SQL dovrei eseguire se volessi fare questa semplice ricerca/sostituzione sull'intero database utilizzando phpMyAdmin?

-CH

4
Commenti

Se non hai familiarità con le query prova il plugin Search and Replace, http://wordpress.org/extend/plugins/search-and-replace/

t31os t31os
26 gen 2011 16:19:12

Perché non usare le funzionalità di WordPress per aggiornare l'URL?

http://codex.wordpress.org/Moving_WordPress dettaglia tutto

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

Esiste un plugin per questo. Consente un utilizzo comodo del backend e sostituisce anche l'URL nel contenuto dei post e in altri campi, se lo desideri: https://wordpress.org/plugins/better-search-replace/

simonthesorcerer simonthesorcerer
23 lug 2015 23:33:19

fare questo con una query SQL corromperà qualsiasi valore PHP serializzato memorizzato nel database, rompendo il sito se il nuovo URL ha una lunghezza diversa rispetto al vecchio URL

Tom J Nowell Tom J Nowell
3 set 2021 17:03:43
Tutte le risposte alla domanda 7
7
42

Migliori opzioni per lavorare con opzioni, post, contenuti dei post e meta dei post:

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');

Vedi anche Ricerca dati con phpMyAdmin e MySQL | Packt Publishing. E Search RegEx è un ottimo plugin per WordPress che permette di cercare e sostituire con Grep in tutti i post e le pagine.

Aggiornamento 16/06/2015: Usare lo strumento linkato nella prossima frase è molto meglio, poiché una semplice ricerca/sostituzione come sopra in un dump del database romperà i dati serializzati. Vedi interconnectit.com WordPress Serialized PHP Search Replace Tool. In questo modo, non romperai i dati serializzati e non avrai bisogno di eseguire RegEx sul contenuto dei post, poiché lo script di interconnect cambia gli URL ovunque. Io uso questo strumento spesso per migrare siti su domini diversi, o semplicemente per fare un cambiamento globale da http a https per forzare SSL senza plugin e cambiare tutti gli URL nel contenuto per prevenire errori di elementi non sicuri.

Modifica 02/09/21 WP CLI è anche un ottimo strumento, e gestisce correttamente i dati serializzati. Vedi https://developer.wordpress.org/cli/commands/search-replace/

25 gen 2011 16:02:41
Commenti

Non cambiare mai il guid - anche se passi a un nuovo dominio. Viene utilizzato per identificare in modo univoco il post poiché l'ID può cambiare se i post vengono esportati/importati in un nuovo database. Tra le altre cose, i lettori RSS utilizzano il GUID per determinare se un articolo specifico è stato letto o meno. Modificare il guid farà sostanzialmente ripubblicare tutti i tuoi articoli.

Taylor Dewey Taylor Dewey
16 giu 2012 20:42:45

@taylordewey ha detto: "Non cambiare mai il guid..." Sciocchezze.

markratledge markratledge
17 giu 2012 21:55:04

@songdogtech Vuoi spiegare perché sono sciocchezze?

shea shea
6 mar 2013 06:39:48

Se stai cambiando dominio, semplicemente non hai scelta e devi cambiare i GUID. La perdita di lettori RSS è un prezzo minimo da pagare.

markratledge markratledge
6 nov 2015 22:20:50

Perché si dovrebbe cambiare il GUID?

kaiser kaiser
11 ago 2016 19:36:48

Nonostante i GUID contengano un URL, non vengono utilizzati per creare link (ad esempio nei menu) quando si fa riferimento ai post. E quindi non cambiarli è perfettamente accettabile

Chris Chris
27 mag 2017 15:08:59

Questo non funzionerà per i dati serializzati. Potrebbe compromettere completamente alcune configurazioni del tema. In effetti, utilizza uno strumento come quello di Interconnect/IT.

Christian Lescuyer Christian Lescuyer
17 ott 2017 20:52:24
Mostra i restanti 2 commenti
3
15

La tabella dove viene salvato il tuo URL è wp_options. Dovresti eseguire un aggiornamento sulle colonne che utilizzano l'URL del tuo sito:

UPDATE TABLE wp_options SET option_value = "nuovo dominio" WHERE option_name = "siteurl"
UPDATE TABLE wp_options SET option_value = "nuovo dominio" WHERE option_name = "home"

Potrei aver dimenticato qualche valore, ma ogni volta che ripeti questo processo di trova/sostituisci, puoi notare i valori e le tabelle che dovrebbero essere aggiornate e aggiungerle a questo script.

Il WordPress Codex ha una guida utile su come cambiare l'URL di un sito, forse per te è ancora più comoda: Modificare l'URL del sito

25 gen 2011 13:25:54
Commenti

non esiste un modo per fare un trova/sostituisci su tutto il database? In altre parole... ho notato ad esempio che devo sostituire gli URL in un sacco di posizioni diverse, inclusa la libreria media... Se ci fosse un trova/sostituisci per l'intero database, in pratica per ogni campo, questo risolverebbe il problema. Grazie per l'aiuto

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

Dai un'occhiata al nuovo link che ho aggiunto nella risposta. Penso che sarebbe la strada da percorrere.

Fernando Briano Fernando Briano
25 gen 2011 13:29:08

Questo non funzionerà per i dati serializzati. Potrebbe compromettere completamente alcune configurazioni del tema.

Christian Lescuyer Christian Lescuyer
17 ott 2017 20:52:40
2
10

Questo è uno script plug-and-play fantastico che utilizzo e funziona perfettamente con gli array serializzati che WordPress utilizza per memorizzare le opzioni. Assicurati solo di eliminarlo dal tuo server remoto una volta terminato, poiché rappresenta un ENORME rischio per la sicurezza.

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

2 ago 2011 22:47:12
Commenti

Non so perché ho ricevuto un -1. Questo script è molto meglio di un'istruzione SQL. Feedback, per favore?

lancemonotone lancemonotone
3 ago 2011 17:10:14

uno strumento che le persone che non conoscono SQL possono usare, è fastidioso per coloro che scrivono in SQL

Jon Jon
23 giu 2013 21:54:27
1

Per questo utilizzo WP-CLI perché lo trovo il metodo più semplice e si occupa automaticamente dei dati serializzati.

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

Esiste anche un'opzione che scrive le modifiche in un file SQL invece di manipolare direttamente il database:

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

27 apr 2016 11:41:58
Commenti

di gran lunga la soluzione più robusta e veloce. wp-cli salva ancora una volta la situazione

ryanrain ryanrain
19 giu 2018 21:02:26
3

non devi farlo, puoi utilizzare percorsi relativi.

quando colleghi qualcosa invece di subdominio.esempio.com/immagine.jpg - usa /immagine.jpg per esempio

così non affronterai il problema fin dall'inizio.

altrimenti per un'istruzione di aggiornamento mysql puoi usare

update NOME_TABELLA set NOME_CAMPO = replace(NOME_CAMPO, ‘trova questa stringa’, ‘sostituisci la stringa trovata con questa stringa’);
25 gen 2011 13:45:36
Commenti

Grazie... sì lo farò la prossima volta. L'istruzione SQL esegue una ricerca e sostituzione sull'intero database (comprese tutte le tabelle)?

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

@NetConstructor.com L'istruzione SQL che mireille ti ha fornito sopra è il comando generico di MySQL per sostituire una stringa in un campo specifico di una tabella specifica. Se provassi a eseguire questa istruzione così com'è scritta, non funzionerebbe. Per far funzionare questo comando, dovresti cambiare TABLE_NAME & FIELD_NAME con un campo e una tabella reali utilizzati da WordPress.

Manzabar Manzabar
26 gen 2011 05:15:06

Nota anche che se desideri utilizzare percorsi relativi, molte parti di WordPress tendono a inserire automaticamente percorsi assoluti. Per ottenere davvero questo risultato, un plugin come: https://wordpress.org/plugins/root-relative-urls/ è molto, molto utile

benz001 benz001
15 set 2014 08:03:09
1

Per cambiare il dominio di WordPress, cosa che spesso ci serve, ad esempio per mettere online un sito da localhost: ecco una lista completa di query di aggiornamento:

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');
  • Dobbiamo anche aggiungere altre tabelle che non sono di default in WP se necessario.

AGGIORNAMENTO: Search Replace DB versione 3.1.0 è uno strumento user-friendly, con interfaccia front-end per sviluppatori, che permette di eseguire operazioni di ricerca/sostituzione su tutto il database, senza danneggiare stringhe o oggetti PHP serializzati.

24 nov 2011 18:09:00
Commenti

Questo non funzionerà per i dati serializzati. Potrebbe compromettere completamente la configurazione del tema.

Christian Lescuyer Christian Lescuyer
17 ott 2017 20:50:59
1
-2

In realtà non è necessario utilizzare una query SQL, bastano alcune modifiche nei file wp_config.php e functions.php del tuo tema. Dai un'occhiata a questo argomento nel Codex di WordPress: https://codex.wordpress.org/Changing_The_Site_URL

6 mag 2015 14:10:22
Commenti

Questo non è corretto. Purtroppo WordPress memorizza alcuni URL nel database come testo.

s_ha_dum s_ha_dum
30 set 2015 17:03:25