Thoát khỏi một chuỗi có nghĩa là để giảm sự mơ hồ trong dấu ngoặc kép (và các ký tự khác) được sử dụng trong chuỗi đó. Ví dụ:khi bạn xác định một chuỗi, bạn thường đặt nó trong dấu ngoặc kép hoặc dấu nháy đơn:
"Hello World."
Nhưng điều gì sẽ xảy ra nếu chuỗi của tôi có dấu ngoặc kép bên trong nó?
"Hello "World.""
Bây giờ tôi có sự mơ hồ - trình thông dịch không biết chuỗi của tôi kết thúc ở đâu. Nếu tôi muốn giữ dấu ngoặc kép của mình, tôi có một số lựa chọn. Tôi có thể sử dụng các dấu ngoặc kép xung quanh chuỗi của mình:
'Hello "World."'
Hoặc tôi có thể thoát khỏi báo giá của mình:
"Hello \"World.\""
Bất kỳ trích dẫn nào đứng trước dấu gạch chéo đều bị thoát ra và được hiểu là một phần giá trị của chuỗi.
Khi nói đến truy vấn, MySQL có một số từ khóa nhất định mà nó theo dõi mà chúng ta không thể sử dụng trong các truy vấn của mình mà không gây ra một số nhầm lẫn. Giả sử chúng ta có một bảng giá trị trong đó một cột được đặt tên là "Chọn" và chúng ta muốn chọn cột đó:
SELECT select FROM myTable
Bây giờ chúng tôi đã đưa ra một số mơ hồ vào truy vấn của chúng tôi. Trong truy vấn của mình, chúng tôi có thể giảm sự mơ hồ đó bằng cách sử dụng dấu tích sau:
SELECT `select` FROM myTable
Điều này loại bỏ sự nhầm lẫn mà chúng tôi đã giới thiệu bằng cách sử dụng khả năng phán đoán kém trong việc chọn tên trường.
Rất nhiều điều này có thể được xử lý cho bạn bằng cách chỉ cần chuyển các giá trị của bạn qua mysql_real_escape_string()
. Trong ví dụ bên dưới, bạn có thể thấy rằng chúng tôi đang chuyển dữ liệu do người dùng gửi thông qua chức năng này để đảm bảo rằng nó sẽ không gây ra bất kỳ sự cố nào cho truy vấn của chúng tôi:
// Query
$query = sprintf("SELECT * FROM users WHERE user='%s' AND password='%s'",
mysql_real_escape_string($user),
mysql_real_escape_string($password));
Các phương thức khác tồn tại để thoát chuỗi, chẳng hạn như add_slashes
, addcslashes
, quotemeta
và hơn thế nữa, mặc dù bạn sẽ thấy rằng khi mục tiêu là chạy một truy vấn an toàn, bởi và các nhà phát triển lớn thích mysql_real_escape_string
hoặc pg_escape_string
(trong ngữ cảnh của PostgreSQL.