Який SQL-запит зробити простий пошук і заміна


20

Кожного разу, коли я створюю новий веб-сайт, я спочатку створюю веб-сайт, який розміщується на піддомені на зразок "stage.domain-name.com".

Після того, як все працює правильно, я експортую базу даних, відкриваю її в блокноті ++ і роблю пошук / заміну на "subdomain.domain-name.com" і замінюю її на "domain-name.com" ... нарешті імпортую її в нову база даних для живого сайту.

Моє запитання ... який запит SQL мені потрібно запустити, якщо я просто хотів зробити цю просту знахідку / заміну у всій базі даних за допомогою phpmyadmin?

-CH


Якщо ви не знайомі з запитами, спробуйте плагін "Пошук і заміна", wordpress.org/extend/plugins/search-and-replace
t31os

Чому б не використовувати функцію WordPress для оновлення URL-адреси? codex.wordpress.org/Moving_WordPress деталізує все
Алекс Старший

Для цього є плагін. Це дозволяє зручно використовувати бекенд, а також замінює URL-адресу в пост-контенті та деяких інших полях, якщо ви хочете: wordpress.org/plugins/better-search-replace
simonthesorcerer

Відповіді:


13

Таблиця, в якій збережена ваша URL-адреса, - wp_options. Вам слід оновити стовпці, які використовують URL-адресу для вашого веб-сайту:

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"

Можливо, мені не вистачає якогось значення, але щоразу, коли ви знову зробите цей процес пошуку / заміни, ви можете помітити значення та таблиці, які слід оновити, і додати їх до цього сценарію.

WordPress Codex має чудовий посібник про те, як змінити URL-адресу сайту, можливо, це ще зручніше для вас: Зміна URL-адреси сайту


1
чи не існує способу знайти / замінити всю базу даних? Іншими словами ... Я помітив, наприклад, що мені потрібно замінити URL-адреси в різних місцях, включаючи медіа-бібліотеку .... Якщо б було знайти / замінити всю базу даних по суті для кожного поля, то це вирішило б проблема. Дякуємо за допомогу
NetConstructor.com

Перевірте те нове посилання, яке я додав у відповідь. Я думаю, що це був би шлях.
Фернандо Бріано

1
Це не працюватиме для серіалізованих даних. Це може повністю порушити деяку конфігурацію теми.
Крістіан Лескуер

29

Найкраще робити параметри, публікації, вміст публікацій та мета мета публікації:

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

Також див. Пошук даних за допомогою phpMyAdmin та MySQL | Пакетне видавництво. І Search RegEx - хороший плагін WP, який зможе здійснювати пошук та заміну на Grep через усі повідомлення та сторінки.

Оновлення 16.06.2015: Використання інструменту, зв'язаного в наступному реченні, набагато краще, оскільки проста пошук / заміна, як зазначено вище, на дампах бази даних порушить серіалізовані дані. Див. Interconnectit.com WordPress серійний інструмент пошуку PHP для заміни. Таким чином, ви не порушуєте серіалізовані дані і не потрібно буде запускати RegEx на вміст публікації, оскільки сценарій взаємозв'язку змінює URL-адреси скрізь. Я використовую цей інструмент весь час для міграції сайтів до різних доменів або просто для зміни глобальної зміни з http на https, щоб змусити SSL без плагінів та змінити всі URL-адреси вмісту, щоб запобігти небезпечним помилкам елементів.


2
Ніколи не змінюйте настанови - навіть якщо ви переходите до нового домену. Він використовується для унікального ідентифікації публікації, оскільки ідентифікатор може змінюватися, якщо публікації експортуються / імпортуються в нову базу даних. З одного боку, RSS-читачі використовуватимуть GUID, щоб визначити, чи була прочитана певна стаття чи ні. Зміна настанови ефективно опублікує всі ваші статті.
Тейлор Дьюї

@taylordewey сказав: "Ніколи не змінюй настанови ..." Сміття.
markratledge

1
@songdogtech Care пояснить, чому це сміття?
she

1
Чому потрібно було б змінити GUID?
кайзер

1
Це не працюватиме для серіалізованих даних. Це може повністю порушити деяку конфігурацію теми. Дійсно використовувати такий інструмент, як Interconnect / IT's.
Крістіан Лескуер

9

Це чудовий скрипт, що використовується для мене, і він прекрасно працює з серіалізованими масивами, які WP використовує для зберігання параметрів. Просто не забудьте видалити його з віддаленого сервера, коли ви закінчите, оскільки це ВЕЛИЧЕЗНИЙ ризик безпеки.

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


2
Я не знаю, чому я був -1. Цей скрипт набагато краще, ніж оператор SQL. Відгук, будь ласка?
ланцемонотон

1
інструмент , який люди , які не знають SQL можна використовувати, засмучує тих , хто пише в SQL
Джон

4

Для цього я використовую WP-CLI, оскільки мені це найлегше, і він піклується про серіалізовані дані.

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

Також є варіант, який записує ваші зміни у файл SQL замість маніпулювання фактичною базою даних:

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


на сьогоднішній день найбільш міцне і швидке рішення. wp-cli врятує день ще раз
ryanrain

3

вам не доведеться цього робити, ви можете використовувати відносні шляхи.

коли ви щось посилаєте замість subdomain.soemthing.com/image.jpg - використовуйте /image.jpg, наприклад

як це, ви не зіткнетеся з проблемою в першу чергу.

в іншому випадку для оператора оновлення mysql ви можете використовувати

update TABLE_NAME set FIELD_NAME = replace(FIELD_NAME, find this string’, replace found string with this string’);

Дякую ... так, я зроблю це наступного разу. Оператор SQL знаходить заміну для всієї бази даних (включаючи всі таблиці)?
NetConstructor.com

@ NetConstructor.com Мірель SQL, який ви наводили вище, - це загальна команда MySQL для заміни рядка в певному полі певної таблиці. Якщо ви спробували запустити це твердження так, як було написано, воно не вийде. Щоб ця команда працювала, вам потрібно буде змінити TABLE_NAME & FIELD_NAME на реальне поле та таблицю, використовувані WordPress.
Манзабар

Зауважте також, що навіть якщо ви хочете використовувати відносні шляхи, багато частин wordpress прагнуть до автоматичного вставлення повних шляхів. Щоб справді отримати цей робочий плагін на зразок: wordpress.org/plugins/root-relative-urls дуже і дуже корисно
benz001

2

Щоб змінити домен wordpress, що нам часто потрібно, можливо, зробити сайт живим з localhost: Це повний перелік запитів на оновлення:

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');
  • Ми також повинні додати інші таблиці, які не є типовими для WP, якщо це необхідно.

ОНОВЛЕННЯ: Пошук Замініть DB версії 3.1.0 - це зручний для розробників інструмент, призначений для передового використання, який дозволяє виконувати пошук / заміну широких баз даних, які не завдають шкоди серіалізованим рядкам або об'єктам PHP.


2
Це не працюватиме для серіалізованих даних. Це може повністю порушити конфігурацію теми.
Крістіан Лескуер

-1

Насправді, вам не потрібно використовувати SQL-запит лише для деяких коригувань у файлі wp_config та function.php у вашій темі. Перегляньте цю тему в Wordpress Codex: https://codex.wordpress.org/Changing_The_Site_URL


1
Це не правильно. На жаль, WordPress зберігає деяку URL-адресу в базі даних як текст.
s_ha_dum
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.