使用 SQL 从 WordPress 帖子中删除 HTML 失败且没有错误

Posted

技术标签:

【中文标题】使用 SQL 从 WordPress 帖子中删除 HTML 失败且没有错误【英文标题】:Deleting HTML from WordPress posts using SQL failing without error 【发布时间】:2020-09-08 09:14:55 【问题描述】:

我正在尝试从所有 wordpress 帖子和页面中删除一串 html(但首先是帖子)

我有一个查询,我在其中找到字符串存在的所有实例,它看起来像这样并且运行良好:

SELECT * FROM dmwbg_posts WHERE post_content
                                 LIKE
                             '%<p>Stöd oss</p><p>Vårt arbete</p><p>Om MyRight</p><p>Jobb och praktik</p><p>Nyheter</p><p>Kontakta oss</p><p>Besöks- och postadress: MyRight Liljeholmen 7A 117 63<br /> Telefon: 08-505 776 00   |   Epost: <a href="mailto:info@myright.se">info@myright.se</a>   <span>|   Org. nr 802402-9376</span></p><p><strong>Stöd MyRight med en gåva</strong><br /> Swish: 123 900 11 08<br /> <span>Plusgiro: 90 01 10-8</span></p><p>Besöks- och postadress: <br />MyRight Liljeholmen 7A, 117 63 Stockholm<br /> Telefon: 08-505 776 00<br /> Epost: <a href="mailto:info@myright.se">info@myright.se<br /> </a><span>Org. nr 802402-9376</span></p><p><strong>Stöd MyRight med en gåva</strong><br /> Swish: 123 900 11 08<br /> <span>Plusgiro: 90 01 10-8</span></p>%';

这个查询返回 126 行,我只想删除特定的字符串。并非所有行中的数据。

为此,我编写了以下查询:

UPDATE dmwbg_posts
SET
    post_content = ''
WHERE
    post_content = '%<p>Stöd oss</p><p>Vårt arbete</p><p>Om MyRight</p><p>Jobb och praktik</p><p>Nyheter</p><p>Kontakta oss</p><p>Besöks- och postadress: MyRight Liljeholmen 7A 117 63<br /> Telefon: 08-505 776 00   |   Epost: <a href="mailto:info@myright.se">info@myright.se</a>   <span>|   Org. nr 802402-9376</span></p><p><strong>Stöd MyRight med en gåva</strong><br /> Swish: 123 900 11 08<br /> <span>Plusgiro: 90 01 10-8</span></p><p>Besöks- och postadress: <br />MyRight Liljeholmen 7A, 117 63 Stockholm<br /> Telefon: 08-505 776 00<br /> Epost: <a href="mailto:info@myright.se">info@myright.se<br /> </a><span>Org. nr 802402-9376</span></p><p><strong>Stöd MyRight med en gåva</strong><br /> Swish: 123 900 11 08<br /> <span>Plusgiro: 90 01 10-8</span></p>%';

此查询运行没有任何错误,但它不会替换任何数据。查询结果显示:

Query OK, 0 rows affected (0.02 sec)
Rows matched: 0  Changed: 0  Warnings: 0

在运行我的 UPDATE 查询后运行我的 SELECT 查询会显示相同数量的结果,并且数据仍然显示在 WordPress 网站上。我不确定我做错了什么。

我正在运行 MariaDB 版本 10.1.44-MariaDB-0ubuntu0.18.04.1

【问题讨论】:

【参考方案1】:

在您的更新查询中,您将% 通配符与= 一起使用,该通配符与LIKE 一起使用。这就是它更新 0 条记录的原因。在您的情况下,您应该使用 replace() 函数

update table_name set col_name=replace(col_name,'From_text', 'to_text') where condition

你的价值观应该是这样的

update dmwbg_posts set post_content = replace(post_content, '<p>Stöd oss</p><p>Vårt arbete</p><p>Om MyRight</p><p>Jobb och praktik</p><p>Nyheter</p><p>Kontakta oss</p><p>Besöks- och postadress: MyRight Liljeholmen 7A 117 63<br /> Telefon: 08-505 776 00   |   Epost: <a href="mailto:info@myright.se">info@myright.se</a>   <span>|   Org. nr 802402-9376</span></p><p><strong>Stöd MyRight med en gåva</strong><br /> Swish: 123 900 11 08<br /> <span>Plusgiro: 90 01 10-8</span></p><p>Besöks- och postadress: <br />MyRight Liljeholmen 7A, 117 63 Stockholm<br /> Telefon: 08-505 776 00<br /> Epost: <a href="mailto:info@myright.se">info@myright.se<br /> </a><span>Org. nr 802402-9376</span></p><p><strong>Stöd MyRight med en gåva</strong><br /> Swish: 123 900 11 08<br /> <span>Plusgiro: 90 01 10-8</span></p>', '')
WHERE post_content  LIKE '%<p>Stöd oss</p><p>Vårt arbete</p><p>Om MyRight</p><p>Jobb och praktik</p><p>Nyheter</p><p>Kontakta oss</p><p>Besöks- och postadress: MyRight Liljeholmen 7A 117 63<br /> Telefon: 08-505 776 00   |   Epost: <a href="mailto:info@myright.se">info@myright.se</a>   <span>|   Org. nr 802402-9376</span></p><p><strong>Stöd MyRight med en gåva</strong><br /> Swish: 123 900 11 08<br /> <span>Plusgiro: 90 01 10-8</span></p><p>Besöks- och postadress: <br />MyRight Liljeholmen 7A, 117 63 Stockholm<br /> Telefon: 08-505 776 00<br /> Epost: <a href="mailto:info@myright.se">info@myright.se<br /> </a><span>Org. nr 802402-9376</span></p><p><strong>Stöd MyRight med en gåva</strong><br /> Swish: 123 900 11 08<br /> <span>Plusgiro: 90 01 10-8</span></p>%';

【讨论】:

以上是关于使用 SQL 从 WordPress 帖子中删除 HTML 失败且没有错误的主要内容,如果未能解决你的问题,请参考以下文章

批量删除 WordPress 帖子默认编辑器中的所有内容

php WordPress - 从帖子标题中删除私人/保护

php 从帖子和页面中删除WordPress评论。

Wordpress - 从自定义帖子类型中删除子菜单

如何从 Wordpress (MySQL) 中的多个帖子中删除宽度和高度属性

Wordpress:使用过滤器删除“循环”中的帖子