Wstrzykiwałeś dosłowny odwrotny ukośnik. To wystarczy:
SELECT person_sname
FROM people
WHERE person_sname = 'O\'Brien'
Aby przetestować:
SELECT 'O\\\'Brien', 'O\'Brien'
Aktualizacja: Jest już zaakceptowana odpowiedź, więc dodam tylko kilka wyjaśnień.
Po pierwsze przeoczyłem fakt, że przechowywane dane są uszkodzone. Nie trzeba dodawać, że to wyjaśnia, dlaczego person_sname = 'O\\\'Brien'
to prawda.
Po drugie, \
znak ma dwa zastosowania w składni MySQL:
- To znak używany do tworzenia sekwencje ucieczki
:
\n
,\t
... - Jest to domyślny znak ucieczki do wstawiania dosłownego
%
i_
znaki w wyrażenia LIKE :foo LIKE '%abc\%def%'
Problem polega na tym, że wstawianie \
symbol w wyrażeniu LIKE wyzwala oba zachowania, więc tak naprawdę musisz wstawić cztery ukośniki odwrotne, aby uzyskać jeden :
person_sname like 'O\\\\\'Brien'
... chyba że zmienisz drugie znaczenie za pomocą ESCAPE
klauzula:
person_sname like 'O\\\'Brien' escape '|'
Oczywiście, jeśli dane nie zostały uszkodzone, możesz po prostu:
person_sname = 'O\'Brien'
person_sname like 'O\'Brien'