如何更改MySQL中字段内的URL?

Jer*_*ins 5 mysql sql wordpress

我有一个名为"wp-posts"的表,其中包含"post-content"字段.此字段包含博客文章的文本.我想更改所有记录以替换另一个记录的URL.

想象一下,我可以拥有以下内容:

这是一个测试,某处有像<img src ="http:// oldurl.com /wp-content/somimg.jpg">之类的东西,比如<a href="http:// oldurl.com /something">一个链接</a>."

我想要它

这是一个测试,其中有一些像<img src ="http:// newurl.com /wp-content/somimg.jpg">之类的东西,比如<a href="http:// newurl.com /something">一个链接</a>."

我需要能够为表格中的每个记录更改此内容,而无需在Wordpress中打开每个帖子并手动更改它们.必须有一种方法来做到这一点

小智 19

使用MySQL的replace()函数可以使用简单的SQL语句轻松实现这一点.在我们这样做之前,您绝对应该进行数据库转储或用于备份的任何内容.它不仅仅是正确的事情,而且如果你在替换上犯了错误,可能很难撤消它(是的,你可以回滚,但你可能只会在以后弄清楚你的错误.)

要从MySQL创建数据库转储,您可以运行这样的东西 -

mysqldump -h hostname -u username -p databasename > my_sql_dump.sql
Run Code Online (Sandbox Code Playgroud)

哪里(你可能知道这一点,但为了后代的完整性......) -

  • hostname是数据库主机名的占位符.如果数据库服务器在您自己的计算机上运行,​​那么您可以使用"localhost"或只是完全关闭"-h hostname"
  • username是具有在数据库上运行转储的权限的用户的占位符.这通常是一个管理员,但如果它是一个共享数据库,它可能只是你.
  • databasename是包含表的整个数据库的名称.(请注意," - p"与此数据库名称无关." - p"表示MySQL应该要求您输入密码才能登录.)

现在我们已经解决了这个问题,您可以使用以下命令登录MySQL数据库:

mysql -h hostname -u username -p databasename
Run Code Online (Sandbox Code Playgroud)

只需运行此声明:

UPDATE `wp-posts` SET `post-content` = REPLACE(`post-content`, "http://oldurl.com", "http://newurl.com");
Run Code Online (Sandbox Code Playgroud)

这应该做到!

如果你犯了一个错误,你可以经常重新运行声明,原始文本和新文本被反转(如果新文本 - 在你的情况下是新的URL - 在你进行替换之前文本中尚未存在).有时候这是不可能的,这取决于新文本是什么(再次,在你的情况下不太可能.)无论如何,你总是可以尝试恢复sql转储 -

cat my_sql_dump.sql | mysql -h hostname -u username -p databasename
Run Code Online (Sandbox Code Playgroud)

就万事大吉了.


Eri*_*ric 5

使用MySQL中的替换字符串函数:

UPDATE MyTable SET textfield = REPLACE(textfield, "http://oldurl.com/", "http://newurl.com")