MySQL:查询的含义是“转义'!'”

时间:2019-07-12 03:37:13

标签: mysql mysql-real-escape-string

编辑其他人的代码发现此查询:

SELECT c.name AS category_name,
       p.id,
       p.name,
       p.description,
       p.price,
       p.category_id,
       p.created
FROM   products p
       LEFT JOIN categories c
              ON p.category_id = c.id
WHERE  p.name LIKE '%keyword%' escape '!'
        OR p.description LIKE '%keyword%' escape '!'
ORDER  BY p.name ASC
LIMIT  0, 6

除了第11行和第12行上的escape '!'以外,我什么都明白。我猜想是与'转义'有关的,如果不知道,在查询之前是否可以更好地实现它(代码是PHP)或将作业交给数据库引擎(这是'!'符号的意思吗?)。

谢谢。

2 个答案:

答案 0 :(得分:1)

您无需在此特定查询中进行转义,但如果需要(例如,如果您在搜索字词中包含%字符),则需要一个转义字符来区分作为搜索字词一部分的%和在查询的类似部分中用作占位符的其他%字符。

在这种情况下,您使用用escape关键字定义的字符来对搜索词中的%进行转义。

例如,假设您要在名称字段中查找字符串25%。您将像这样去

WHERE  p.name LIKE '%25!%%' escape '!'

答案 1 :(得分:1)

ESCAPE关键字用于转义模式匹配的字符,例如(%)百分比和下划线(_)(如果它们构成数据的一部分)。

让我们假设我们要检查可使用的字符串“ 67%”;

LIKE '67#%%' ESCAPE '#';

如果我们要搜索电影“ 67%有罪”,则可以使用下面显示的脚本来实现。

SELECT * FROM movies WHERE title LIKE '67#%%' ESCAPE '#';

请注意LIKE子句中的双“ %%”,红色的“%”中的第一个被视为要搜索的字符串的一部分。另一个用于匹配后面任意数量的字符。

如果我们使用类似的

,同样的查询也将起作用
SELECT * FROM movies WHERE title LIKE '67=%%' ESCAPE '=';