Je injecteerde een letterlijke backslash. Dit is genoeg:
SELECT person_sname
FROM people
WHERE person_sname = 'O\'Brien'
Om te testen:
SELECT 'O\\\'Brien', 'O\'Brien'
Bijwerken: Er is al een geaccepteerd antwoord, dus ik zal een paar verduidelijkingen toevoegen.
Ten eerste had ik over het hoofd gezien dat opgeslagen gegevens beschadigd waren. Onnodig te zeggen dat dit verklaart waarom person_sname = 'O\\\'Brien'
is waar.
Ten tweede, de \
karakter heeft twee toepassingen in de MySQL-syntaxis:
- Het is het teken dat wordt gebruikt om Escape-reeksen
:
\n
,\t
... - Het is de standaard escape-teken om letterlijk
%
in te voegen en_
tekens in LIKE-expressies :foo LIKE '%abc\%def%'
Het probleem is dat het invoegen van een \
symbool in een LIKE-expressie activeert beide gedragingen, dus u moet eigenlijk vier . invoegen backslashes om één te krijgen :
person_sname like 'O\\\\\'Brien'
... tenzij je de tweede betekenis verandert met de ESCAPE
clausule:
person_sname like 'O\\\'Brien' escape '|'
Als de gegevens niet beschadigd zijn, kunt u natuurlijk eenvoudig:
person_sname = 'O\'Brien'
person_sname like 'O\'Brien'