用什么SQL查询来执行简单的查找和替换

时间:2011-01-25 作者:NetConstructor.com

每当我创建一个新网站时,我首先在一个子域上创建一个临时站点,如“stage.domain name.com”。

一切正常后,我导出数据库,在记事本++中打开它,对“subdomain.domain.com”进行查找/替换,并将其替换为“domain.com”。。。最后,我将其导入到实时站点的新数据库中。

我的问题是。。。如果我只想使用phpmyadmin在整个数据库上执行这个简单的查找/替换,那么我需要运行什么SQL查询?

-CH公司

7 个回复
最合适的回答,由SO网友:Fernando Briano 整理而成

保存URL的表是wp\\u 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的很好的指南,也许这对你来说更方便:Changing the Site URL

SO网友:markratledge

最佳选项、帖子、帖子内容和帖子元:

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 是一个很好的WP插件,可以在所有帖子和页面中搜索并替换为Grep。

Update 6/16/2015: 使用下一句中链接的工具要好得多,因为在数据库转储中进行上述简单的查找/替换将破坏序列化数据请参见interconnectit.com WordPress Serialized PHP Search Replace Tool. 这样,您就不需要中断序列化数据,也不需要在post内容上运行RegEx,因为interconnect脚本会更改各地的URL。我一直使用该工具将站点迁移到不同的域,或者简单地从http到https进行全局更改,以强制SSL不带插件,并更改内容中的所有URL以防止不安全的元素错误。

Edit 9/02/21WP-CLI也是一个很好的工具,它可以正确地处理序列化数据。看见https://developer.wordpress.org/cli/commands/search-replace/

SO网友:lancemonotone

这是我使用的一个很好的脚本,它与WP用于存储选项的序列化数组配合得很好。只需确保在完成后从远程服务器中删除它,因为这会带来巨大的安全风险。

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

SO网友:Jan Beck

为此,我使用WP-CLI 因为我发现这是最简单的,而且它可以处理序列化数据。

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

还有一个选项可以将更改写入SQL文件,而不是操纵实际的数据库:

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

SO网友:mireille raad

您不必这样做,可以使用相对路径。

当您链接某些内容而不是子域时。soemthing公司。com/图像。jpg-使用/图像。例如jpg

像这样,你一开始就不会面对这个问题。

否则,对于mysql update语句,可以使用

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

SO网友:Reza Mamun

要更改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默认的表UPDATE: Search Replace DB 版本3.1.0是面向开发人员的用户友好的前端工具,它允许您执行数据库范围的搜索/替换操作,而不会损坏PHP序列化字符串或对象。

SO网友:MEDZ

实际上,您不必使用SQL查询,只需对wp\\U配置和函数进行一些调整即可。主题中的php文件。在Wordpress Codex中查看此主题:https://codex.wordpress.org/Changing_The_Site_URL

结束