Du injicerede et bogstaveligt skråstreg. Dette er nok:
SELECT person_sname
FROM people
WHERE person_sname = 'O\'Brien'
For at teste:
SELECT 'O\\\'Brien', 'O\'Brien'
Opdatering: Der er allerede et accepteret svar, så jeg vil lige tilføje et par præciseringer.
For det første havde jeg overset det faktum, at lagrede data var beskadiget. Det er overflødigt at sige, at det forklarer hvorfor person_sname = 'O\\\'Brien'
er sandt.
For det andet, \
karakter har to anvendelser i MySQL-syntaks:
- Det er det tegn, der bruges til at komponere escape-sekvenser
:
\n
,\t
... - Det er standard escape-tegn at indsætte bogstavelig
%
og_
tegn i LIKE-udtryk :foo LIKE '%abc\%def%'
Problemet er, at indsættelse af en \
symbol i et LIKE-udtryk udløser begge adfærd, så du skal faktisk indsætte fire omvendt skråstreg for at få én :
person_sname like 'O\\\\\'Brien'
... medmindre du ændrer den anden betydning med ESCAPE
klausul:
person_sname like 'O\\\'Brien' escape '|'
Selvfølgelig, hvis data ikke var beskadiget, kunne du blot:
person_sname = 'O\'Brien'
person_sname like 'O\'Brien'