Який 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.