Вие инжектирате буквална обратна наклонена черта. Това е достатъчно:
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'