Mysql
 sql >> база данни >  >> RDS >> Mysql

Как мога да търся фраза Like O'% в MySql?

Вие инжектирате буквална обратна наклонена черта. Това е достатъчно:

SELECT person_sname
FROM people
WHERE person_sname = 'O\'Brien'

За тестване:

SELECT 'O\\\'Brien', 'O\'Brien'

Актуализация: Вече има приет отговор, така че просто ще добавя няколко уточнения.

Първо, бях пренебрегнал факта, че съхранените данни са повредени. Излишно е да казвам, че това обяснява защо person_sname = 'O\\\'Brien' е вярно.

Второ, \ символът има две употреби в синтаксиса на MySQL:

  1. Това е символът, използван за съставяне на екранни последователности :\n , \t ...
  2. Това е escape char по подразбиране за вмъкване на литерал % и _ знаци в LIKE изрази :foo LIKE '%abc\%def%'

Проблемът е, че вмъкването на \ символът в израз LIKE задейства и двете поведения, така че всъщност трябва да вмъкнете четири обратна наклонена черта, за да получите една :

person_sname like 'O\\\\\'Brien'

... освен ако не промените второто значение с ESCAPE клауза:

person_sname like 'O\\\'Brien' escape '|'

Разбира се, ако данните не са повредени, можете просто:

person_sname = 'O\'Brien'
person_sname like 'O\'Brien'


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Свържете се с отдалечен MySQL db от докер контейнер

  2. Имате нужда от помощ за вмъкване на данни, разделени със запетая, в база данни на mysql с помощта на PHP

  3. Бутонът за избор не публикува стойност в базата данни на MySQL

  4. Ефективен начин за свързване към база данни, когато множество функции изпълняват заявки

  5. Използвате cassandra вместо memcache?