Você estava injetando uma barra invertida literal. Isto é suficiente:
SELECT person_sname
FROM people
WHERE person_sname = 'O\'Brien'
Testar:
SELECT 'O\\\'Brien', 'O\'Brien'
Atualização: Já existe uma resposta aceita, então vou adicionar alguns esclarecimentos.
Primeiro, eu havia esquecido o fato de que os dados armazenados estavam corrompidos. Desnecessário dizer que isso explica por que
person_sname = 'O\\\'Brien' é verdade. Em segundo lugar, o
\ caractere tem dois usos na sintaxe do MySQL:- É o caractere usado para compor sequências de escape
:
\n,\t... - É o caractere de escape padrão para inserir literal
%e_caracteres em expressões LIKE :foo LIKE '%abc\%def%'
O problema é que inserir um
\ símbolo em uma expressão LIKE aciona ambos os comportamentos, então você realmente precisa inserir quatro barras invertidas para obter um :person_sname like 'O\\\\\'Brien'
... a menos que você altere o segundo significado com o
ESCAPE cláusula:person_sname like 'O\\\'Brien' escape '|'
Claro, se os dados não estivessem corrompidos, você poderia simplesmente:
person_sname = 'O\'Brien'
person_sname like 'O\'Brien'