在数据库中查找和替换:Windows下如何替换SQL转储文件中的数据?

时间:2019-03-08 作者:Mali Veseljko

与Joomla不同,由于序列化数据的缘故,不能只在WordPress数据库中搜索和替换字符串。我不确定序列化数据是什么,但它使我的生活更加复杂。

是否有可用于此目的的windows搜索和替换软件?

可以使用PowerGrep或类似的grep工具来实现这一点吗?

如果是,请描述一下流程?

2 个回复
SO网友:Atanas Angelov

提供WPCLIsearch-replace 命令重试:
https://developer.wordpress.org/cli/commands/search-replace/

WPCLI是跨平台的search-replace 命令处理序列化数据。

SO网友:Courd Headman

我强烈建议使用WP-CLI(正如Atanas Angelov所建议的)来搜索和替换WordPress数据库。但您的问题是如何对SQL文件执行此操作。我编写了一个PHP函数,它在搜索和替换SQL时处理序列化数据。以我的经验来看,它运作得很好。如果您有反馈,请让我知道,但请随时使用。

您需要一个可以实现此功能的程序,将此功能转换为CLI工具或使用您喜欢的任何编程语言的小型图形应用程序都不会太困难。要像这样运行它,只需将其放置在PHP文件中,并调用文件底部的函数,如下所示:

snr("http://example.com", "https://example.com", "/path/to/original.sql", "/path/to/replaced.sql");
您可以使用php-e/path/to/which来执行该文件。php

我不会把这个文件放在服务器上可公开访问的目录中,但它工作得很好。

除此之外,还有一个流行的“Interconnect”脚本(https://github.com/interconnectit/Search-Replace-DB) 您可以上载到服务器,并从浏览器中使用它来搜索和替换数据库。WP repo中还有几个WordPress插件,用于搜索和替换数据库。一个是https://wordpress.org/plugins/better-search-replace/

    function snr($search, $replace, $inputfile, $outputfile){
    $sql = file_get_contents($inputfile);
    $sql1 = str_replace($search,$replace,$sql);
    file_put_contents($outputfile,$sql1);
    $serstrings = preg_split("/(?<=[{;])s:/",$sql1);

    foreach($serstrings as $i=>$serstring) {
        if (!!strpos($serstring, $replace)){
        $justString = str_replace("\\\\","",str_replace("\\\\\\\\","j",explode(\'\\\\";\',explode(\':\\\\"\',$serstring)[1])[0]));
        $correct = strlen($justString);
        $serstrings[$i] = preg_replace(\'/^\\d+/\',$correct, $serstrings[$i]);
         } 
    }
    file_put_contents($outputfile,implode("s:",$serstrings));
}

相关推荐

在本地主机上从切换到BREW php 7.2后出现cURL 28错误

自从(我相信!)我在本地Mac OS机器上用brew将PHP版本从7.0切换到7.2以来,我在本地主机上安装的Wordpress reporting cURL error 28(timeout)都遇到了麻烦。查看本地站点的任何管理区域或使用WP CLI,WP更新检查和其他cURL调用会导致cURL请求失败:警告:发生意外错误。WordPress可能有问题。org或此服务器的配置。如果您仍然有问题,请尝试支持论坛。(WordPress无法建立到WordPress.org的安全连接。请与服务器管理员联系。)在