Какой SQL-запрос использовать для простой операции поиска и замены

25 янв. 2011 г., 13:09:19
Просмотры: 173K
Голосов: 29

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

После того, как всё работает корректно, я экспортирую базу данных, открываю её в notepad++ и выполняю поиск/замену "subdomain.domain-name.com" на "domain-name.com"... и наконец импортирую её в новую базу данных для рабочего сайта.

Мой вопрос... какой SQL-запрос мне нужно выполнить, если я просто хочу сделать такую простую операцию поиска и замены во всей базе данных, используя phpMyAdmin?

-CH

4
Комментарии

Если вы не знакомы с запросами, попробуйте плагин Search and Replace, http://wordpress.org/extend/plugins/search-and-replace/

t31os t31os
26 янв. 2011 г. 16:19:12

Почему бы не использовать встроенные функции WordPress для обновления URL?

http://codex.wordpress.org/Moving_WordPress содержит все необходимые детали

Alex Older Alex Older
18 нояб. 2014 г. 17:35:20

Для этого есть специальный плагин. Он обеспечивает удобную работу с админкой и также заменяет URL в содержимом записей и других полях, если это требуется: https://wordpress.org/plugins/better-search-replace/

simonthesorcerer simonthesorcerer
23 июл. 2015 г. 23:33:19

выполнение этого с помощью SQL-запроса повредит любые сериализованные PHP-значения в базе данных, что приведёт к поломке сайта, если новый URL имеет другую длину по сравнению со старым URL

Tom J Nowell Tom J Nowell
3 сент. 2021 г. 17:03:43
Все ответы на вопрос 7
7
42

Лучше всего обновить опции, записи, содержимое записей и метаданные:

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

Также посмотрите Searching Data using phpMyAdmin and MySQL | Packt Publishing. И плагин Search RegEx отлично подходит для поиска и замены с помощью Grep во всех записях и страницах.

Обновление 16.06.2015: Использование инструмента, упомянутого в следующем предложении, гораздо лучше, так как простая замена в дампе базы данных, как показано выше, может повредить сериализованные данные. Смотрите interconnectit.com WordPress Serialized PHP Search Replace Tool. Таким образом, вы не повредите сериализованные данные и не придется запускать RegEx для содержимого записей, так как скрипт interconnect изменяет URL-адреса везде. Я часто использую этот инструмент для переноса сайтов на разные домены или просто для глобального изменения с http на https, чтобы принудительно использовать SSL без плагинов и изменить все URL-адреса в содержимом, чтобы избежать ошибок небезопасных элементов.

Редактирование 02.09.21 WP CLI также является отличным инструментом и правильно обрабатывает сериализованные данные. Смотрите https://developer.wordpress.org/cli/commands/search-replace/

25 янв. 2011 г. 16:02:41
Комментарии

Никогда не меняйте guid — даже при переходе на новый домен. Он используется для уникальной идентификации записи, так как ID может измениться, если записи экспортируются/импортируются в новую базу данных. Например, RSS-ридеры используют GUID, чтобы определить, была ли статья прочитана или нет. Изменение guid фактически приведет к повторной публикации всех ваших статей.

Taylor Dewey Taylor Dewey
16 июн. 2012 г. 20:42:45

@taylordewey сказал: "Никогда не меняйте guid..." Чушь.

markratledge markratledge
17 июн. 2012 г. 21:55:04

@songdogtech Не хотите объяснить, почему это чушь?

shea shea
6 мар. 2013 г. 06:39:48

Если вы меняете домены, у вас просто нет выбора, и приходится менять GUID. Потеря подписчиков в RSS-ридерах — это минимальная цена, которую придется заплатить.

markratledge markratledge
6 нояб. 2015 г. 22:20:50

Почему кто-то должен менять GUID?

kaiser kaiser
11 авг. 2016 г. 19:36:48

Несмотря на то, что GUID содержит URL, он не используется для создания ссылок (например, в меню) при обращении к записям. Поэтому не менять их — вполне допустимо.

Chris Chris
27 мая 2017 г. 15:08:59

Это не будет работать с сериализованными данными. Это может полностью нарушить конфигурацию темы. Действительно, лучше использовать такой инструмент, как Interconnect/IT.

Christian Lescuyer Christian Lescuyer
17 окт. 2017 г. 20:52:24
Показать остальные 2 комментариев
3
15

Таблица, в которой сохраняется ваш 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 сайта

25 янв. 2011 г. 13:25:54
Комментарии

Разве нет способа выполнить поиск/замену во всей базе данных? Другими словами... Я заметил, например, что мне нужно заменить URL-адреса в множестве разных мест, включая медиатеку... Если бы существовал поиск/замену для всей базы данных, по сути для каждого поля, это решило бы проблему. Спасибо за помощь

NetConstructor.com NetConstructor.com
25 янв. 2011 г. 13:28:01

Проверьте новую ссылку, которую я добавил в ответе. Думаю, это будет правильным решением.

Fernando Briano Fernando Briano
25 янв. 2011 г. 13:29:08

Это не будет работать для сериализованных данных. Это может полностью сломать некоторые настройки темы.

Christian Lescuyer Christian Lescuyer
17 окт. 2017 г. 20:52:40
2
10

Это отличный готовый скрипт, который я использую, и он прекрасно работает с сериализованными массивами, которые WordPress использует для хранения настроек. Просто убедитесь, что удалили его с удаленного сервера после завершения работы, так как он представляет ОГРОМНЫЙ риск для безопасности.

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

2 авг. 2011 г. 22:47:12
Комментарии

Не понимаю, почему мне поставили минус. Этот скрипт гораздо лучше SQL-запроса. Какие будут замечания?

lancemonotone lancemonotone
3 авг. 2011 г. 17:10:14

инструмент, которым могут пользоваться люди, не знающие SQL, раздражает тех, кто пишет на SQL

Jon Jon
23 июн. 2013 г. 21:54:27
1

Для этого я использую WP-CLI, так как считаю его наиболее удобным, и он корректно обрабатывает сериализованные данные.

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

Также есть опция, которая записывает изменения в SQL-файл вместо непосредственного изменения базы данных:

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

27 апр. 2016 г. 11:41:58
Комментарии

самое надежное и быстрое решение. wp-cli снова выручает

ryanrain ryanrain
19 июн. 2018 г. 21:02:26
3

вам не нужно делать это, вы можете использовать относительные пути.

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

таким образом вы вообще избежите этой проблемы.

в противном случае для mysql update запроса вы можете использовать

update TABLE_NAME set FIELD_NAME = replace(FIELD_NAME, ‘find this string’, ‘replace found string with this string’);
25 янв. 2011 г. 13:45:36
Комментарии

Спасибо... да, в следующий раз так и сделаю. SQL-запрос выполняет поиск и замену по всей базе данных (включая все таблицы)?

NetConstructor.com NetConstructor.com
25 янв. 2011 г. 14:03:52

@NetConstructor.com SQL-запрос, который дала mireille выше, это общая команда MySQL для замены строки в конкретном поле конкретной таблицы. Если вы попытаетесь выполнить этот запрос в точности как он написан, он не сработает. Чтобы команда работала, вам нужно заменить TABLE_NAME и FIELD_NAME на реальные поле и таблицу, используемые WordPress.

Manzabar Manzabar
26 янв. 2011 г. 05:15:06

Также учтите, что даже если вы хотите использовать относительные пути, многие части WordPress склонны автоматически вставлять полные пути. Для реальной работы с этим очень-очень полезен плагин вроде: https://wordpress.org/plugins/root-relative-urls/

benz001 benz001
15 сент. 2014 г. 08:03:09
1

Для изменения домена WordPress, что часто требуется, например, при переносе сайта с локального сервера на хостинг: Вот полный список запросов для обновления:

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');
  • Также необходимо добавить другие таблицы, которые не являются стандартными для WordPress, если это необходимо.

ОБНОВЛЕНИЕ: Search Replace DB версии 3.1.0 — это удобный инструмент с интерфейсом для разработчиков, который позволяет выполнять поиск и замену в базе данных без повреждения PHP сериализованных строк или объектов.

24 нояб. 2011 г. 18:09:00
Комментарии

Это не будет работать с сериализованными данными. Это может полностью нарушить конфигурацию темы.

Christian Lescuyer Christian Lescuyer
17 окт. 2017 г. 20:50:59
1
-2

На самом деле, вам не нужно использовать SQL-запрос, достаточно внести некоторые изменения в файлы wp-config.php и functions.php вашей темы. Ознакомьтесь с этой темой в WordPress Codex: https://codex.wordpress.org/Changing_The_Site_URL

6 мая 2015 г. 14:10:22
Комментарии

Это неверно. К сожалению, WordPress хранит некоторые URL в базе данных в виде текста.

s_ha_dum s_ha_dum
30 сент. 2015 г. 17:03:25