如何在SQL LIKE中使用'\'…ESCAPE'\'

问题描述 投票:0回答:1

我正在尝试删除描述中未包含快速聊天用户名的所有缓存项。在尝试转义破折号时,我一直遇到语法问题?

查询:

$cacheItems = CacheItem::whereRaw("description NOT LIKE '%'")
      ->whereRaw("description NOT LIKE '%👻%'")
      ->whereRaw("description NOT LIKE '%𝑺𝒄 %'")
      ->whereRaw("description NOT LIKE '%𝑺𝒄 :%'")
      ->whereRaw("description NOT LIKE '%𝚜𝚗𝚊𝚙𝚌𝚑𝚊𝚝%'")
      ->whereRaw("description NOT LIKE '%sc\'%'")
      ->whereRaw("description NOT LIKE '%sc\_%' ESCAPE '\'")
      ->whereRaw("description NOT LIKE '%sc \- %' ESCAPE '\'")
      ->whereRaw("description NOT LIKE '%sc %'")
      ->whereRaw("description NOT LIKE '%sc:%'")
      ->whereRaw("description NOT LIKE '%scm %'")
      ->whereRaw("description NOT LIKE '%scm;%'")
      ->whereRaw("description NOT LIKE '%sc- %'")
      ->whereRaw("description NOT LIKE '%sc.%'")
      ->whereRaw("description NOT LIKE '%sc-%'")
      ->whereRaw("description NOT LIKE '%SC -  %'")
      ->whereRaw("description NOT LIKE '%Sc ~%'")
      ->whereRaw("description NOT LIKE '%sc ~%'")
      ->whereRaw("description NOT LIKE '%sc;%'")
      ->whereRaw("description NOT LIKE '%sc~%'")
      ->whereRaw("description NOT LIKE '%sc/%'")
      ->whereRaw("description NOT LIKE '%snapchat:%'")
      ->whereRaw("description NOT LIKE '%snapchat - %'")
      ->whereRaw("description NOT LIKE '%snapchat-%'")
      ->whereRaw("description NOT LIKE '%snap~%'")
      ->whereRaw("description NOT LIKE '%snap =%'")
      ->whereRaw("description NOT LIKE '%snap•%'")
      ->whereRaw("description NOT LIKE '%snap%'")
      ->whereRaw("description NOT LIKE '%snap~%'")
      ->whereRaw("description NOT LIKE '%snapchat%'")
      ->whereRaw("description NOT LIKE '%snapchat ~ %'")
      ->whereRaw("description NOT LIKE '%snap:%'")
      ->whereRaw("description NOT LIKE '%add my sc%'")
      ->whereRaw("description NOT LIKE '%add me on sc%'")
      ->whereRaw("description NOT LIKE '%add me sc%'")
      ->whereRaw("description NOT LIKE 'snap %'")
->get();

错误:

SQLSTATE[42000]: Syntax error or access violation: 1064 You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near '%sc \- %' ESCAPE '\' and description NOT LIKE '%sc %' and description NOT LIKE '' at line 1 (SQL: select * from `cache_items` where description NOT LIKE '%' and description NOT LIKE '%👻%' and description NOT LIKE '%𝑺𝒄 %' and description NOT LIKE '%𝑺𝒄 :%' and description NOT LIKE '%𝚜𝚗𝚊𝚙𝚌𝚑𝚊𝚝%' and description NOT LIKE '%sc\'%' and description NOT LIKE '%sc\_%' ESCAPE '\' and description NOT LIKE '%sc \- %' ESCAPE '\' and description NOT LIKE '%sc %' and description NOT LIKE '%sc:%' and description NOT LIKE '%scm %' and description NOT LIKE '%scm;%' and description NOT LIKE '%sc- %' and description NOT LIKE '%sc.%' and description NOT LIKE '%sc-%' and description NOT LIKE '%SC -  %' and description NOT LIKE '%Sc ~%' and description NOT LIKE '%sc ~%' and description NOT LIKE '%sc;%' and description NOT LIKE '%sc~%' and description NOT LIKE '%sc/%' and description NOT LIKE '%snapchat:%' and description NOT LIKE '%snapchat - %' and description NOT LIKE '%snapchat-%' and description NOT LIKE '%snap~%' and description NOT LIKE '%snap =%' and description NOT LIKE '%snap•%' and description NOT LIKE '%snap%' and description NOT LIKE '%snap~%' and description NOT LIKE '%snapchat%' and description NOT LIKE '%snapchat ~ %' and description NOT LIKE '%snap:%' and description NOT LIKE '%add my sc%' and description NOT LIKE '%add me on sc%' and description NOT LIKE '%add me sc%' and description NOT LIKE 'snap %')
php mysql escaping sql-like
1个回答
0
投票

您在此使用\作为您的ESCAPE字符:

  description NOT LIKE '%sc\_%' ESCAPE '\'

这是一个有问题的选择,因为\本身在各处被用作转义字符。如果这是我的代码,那么在此情况下,我将完全不信任\

或者最好选择这样的其他转义字符(在此示例中为|

  description NOT LIKE '%sc|_%' ESCAPE '|'

或将SQL的ESCAPE部分中的\加倍,如下所示

  description NOT LIKE '%sc\_%' ESCAPE '\\'

(并且,请记住,column LIKE '%whatever'是臭名昭著的查询性能反模式,因为它不能使用column上的任何索引。)

© www.soinside.com 2019 - 2024. All rights reserved.