Bạn đã tiêm một dấu gạch chéo ngược theo nghĩa đen. Như vậy là đủ:
SELECT person_sname
FROM people
WHERE person_sname = 'O\'Brien'
Để kiểm tra:
SELECT 'O\\\'Brien', 'O\'Brien'
Cập nhật: Đã có một câu trả lời được chấp nhận nên tôi sẽ chỉ thêm một vài điều làm rõ.
Đầu tiên, tôi đã bỏ qua thực tế rằng dữ liệu được lưu trữ đã bị hỏng. Không cần phải nói, điều đó giải thích tại sao person_sname = 'O\\\'Brien'
là đúng.
Thứ hai, \
ký tự có hai cách sử dụng trong cú pháp MySQL:
- Đó là ký tự được sử dụng để soạn trình tự thoát
:
\n
,\t
... - Đây là ký tự thoát mặc định để chèn chữ
%
và_
ký tự trong biểu thức LIKE :foo LIKE '%abc\%def%'
Vấn đề là việc chèn một \
biểu tượng trong biểu thức LIKE sẽ kích hoạt cả hai hành vi, vì vậy bạn thực sự cần phải chèn bốn dấu gạch chéo ngược để lấy một :
person_sname like 'O\\\\\'Brien'
... trừ khi bạn thay đổi nghĩa thứ hai bằng ESCAPE
mệnh đề:
person_sname like 'O\\\'Brien' escape '|'
Tất nhiên, nếu dữ liệu không bị hỏng, bạn có thể chỉ cần:
person_sname = 'O\'Brien'
person_sname like 'O\'Brien'