Вие инжектирате буквална обратна наклонена черта. Това е достатъчно:
SELECT person_sname
FROM people
WHERE person_sname = 'O\'Brien'
За тестване:
SELECT 'O\\\'Brien', 'O\'Brien'
Актуализация: Вече има приет отговор, така че просто ще добавя няколко уточнения.
Първо, бях пренебрегнал факта, че съхранените данни са повредени. Излишно е да казвам, че това обяснява защо person_sname = 'O\\\'Brien'
е вярно.
Второ, \
символът има две употреби в синтаксиса на MySQL:
- Това е символът, използван за съставяне на екранни последователности
:
\n
,\t
... - Това е 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'