【问题标题】:Search HTML using LIKE Operator in Database MySQL在 MySQL 数据库中使用 LIKE 运算符搜索 HTML
【发布时间】:2018-01-25 15:46:42
【问题描述】:

我在我的数据库中存储了一些html,例如:

ID | Data
1  | <a href=\"link\" class=\"someclass\" id=\"id_10923074\"><h3 class=\"class1 class2\"><\/h3><br \/><div class=\"clearfix\"><\/div><\/a>
2  | <a href=\"lin2\" class=\"someclass\" id=\"id_10923075\"><h3 class=\"class1 class2\">some text<\/h3><br \/><div class=\"clearfix\"><\/div><\/a>

现在,我想查询一个不包含在 h3 中的文本的无效记录,即第 1 行。

我尝试了很多查询,其中一些如下:

SELECT `mytable`.* FROM `mytable` WHERE (Data LIKE '%<h3 class=\"class1 class2\"><\/h3>%')

SELECT `mytable`.* FROM `mytable` WHERE (Data LIKE '%h3 class="class1 class2"></h3%')

SELECT `mytable`.* FROM `mytable` WHERE (Data LIKE '"%class1 class2%"')

SELECT `mytable`.* FROM `mytable` WHERE (Data LIKE '%<h3 class=\"class1 class2\">%')

我在这里缺少什么?我在这里检查了很多问题,但找不到任何解决方案。

谢谢。

【问题讨论】:

  • 它只是没有返回任何东西,还是它实际上是在做一个 sql 错误?
  • 它根本没有返回任何东西,它说找到零行。

标签: php mysql database mariadb


【解决方案1】:

您的代码按预期工作。见this sqlfiddle

SELECT * FROM `mytable` WHERE (Data LIKE '%<h3 class=\"class1 class2\"><\/h3>%')

您的问题很可能与您的引用有关。确保您在 PHP 代码中正确转义了反斜杠 (\) 和引号 (")。

【讨论】:

  • 谢谢,我也在尝试直接在 mysql 中运行,例如:SELECT mytable.* FROM mytable WHERE (Data LIKE '%

    %') 不能直接在我的 mysql 中工作,但是在你的 sqlfiddle 中它可以工作,有什么想法吗?

  • 您的数据在数据库中是否包含物理反冲?如果是,请确保您传递 \\\" 以匹配反斜杠和引号。
  • 是的,数据最初看起来就像我在问题中显示的那样。斜线在数据库中是物理的。我试过 \\\" 但没有成功:(
  • 没有php代码,我现在直接用mysql查询,可以删除无效记录。
【解决方案2】:

找到解决方案here

所以诀窍是只对反斜杠进行双重转义,对于字符串转义,只需要一次转义。

例如

The single quote ' only needs escaping once LIKE '%\'%'
But to query backslash \ you need to double escape to LIKE '%\\\\%'
If you wanted to query backslash+singlequote \' then LIKE '%\\\\\'%' (with 5 backslashes)

解释来源摘录:

因为 MySQL 在字符串中使用 C 转义语法(例如,“\n” 代表换行符),您必须将您使用的任何“\”加倍 在 LIKE 字符串中。例如,要搜索“\n”,请将其指定为“\n”。 要搜索“\”,请将其指定为“\”;这是因为反斜杠 被解析器剥离一次,当模式匹配时再次剥离 做了,留下一个反斜杠来匹配。

正确查询:

SELECT * FROM `mytable` WHERE (Data LIKE '%<h3 class=\\\\"class1 class2\\\\"><\\\\/h3>%')

【讨论】:

    【解决方案3】:

    要查找Data 至少有一个&lt;h3&gt;(有或没有任何属性,例如class=)且&lt;/h3&gt; 之前没有文本的行:

    WHERE Data REGEXP '<h3[^>]*></h3>'
    

    【讨论】:

    • No
    • @FrankerZ - “不”是什么意思?找不到空的h3s?还是没有忽略空的 h3?举个例子。
    • 感谢帮助,但它也不起作用,返回零行。
    • @M3Dev - 奇怪。我将 FrankerZ 的 sqlfiddle 更改为使用我的 REGEXP,我得到了一行。
    猜你喜欢
    • 2012-09-20
    • 2011-07-08
    • 1970-01-01
    • 2022-06-20
    • 2023-03-06
    • 1970-01-01
    • 2019-08-24
    • 2021-04-27
    • 1970-01-01
    相关资源
    最近更新 更多