Escape chuỗi SQL
Escape văn bản để đặt trong chuỗi SQL dùng nháy đơn: nhân đôi dấu nháy (SQL chuẩn) hoặc dùng escape bằng dấu gạch chéo ngược của MySQL. Tùy chọn bọc trong dấu nháy.
Mỗi dấu ' được đổi thành ''. Dùng được cho PostgreSQL, SQLite, SQL Server, Oracle và MySQL bật NO_BACKSLASH_ESCAPES. Trong mã ứng dụng, hãy ưu tiên truy vấn tham số hóa.
Chạy hoàn toàn trong trình duyệt. Dữ liệu của bạn không bao giờ b ị tải lên.
Công cụ Liên quan
Xem Tất cảEscape chuỗi SQL là gì?
Công cụ escape SQL chuyển một giá trị văn bản thô thành dạng có thể đặt bên trong chuỗi SQL dùng nháy đơn. Chế độ chuẩn nhân đôi mọi dấu nháy đơn (O'Reilly → O''Reilly); chế độ MySQL dùng escape bằng dấu gạch chéo ngược giống mysql_real_escape_string(). Công cụ dành cho việc viết SQL bằng tay – mã ứng dụng nên dùng truy vấn tham số hóa.
Cách sử dụng Escape chuỗi SQL
- Chọn Kiểu escape: SQL chuẩn hoặc MySQL.
- Tùy chọn đánh dấu Bọc kết quả trong dấu nháy đơn.
- Gõ hoặc dán giá trị thô vào ô nhập.
- Sao chép kết quả đã escape vào câu SQL của bạn.
Ví dụ
O'Reilly \ x
O''Reilly \ x
Chế độ SQL chuẩn: dấu nháy được nhân đôi, dấu gạch chéo ngược giữ nguyên.
Khi nào nên dùng Escape chuỗi SQL
Dùng để viết câu SQL dùng một lần, dữ liệu seed hoặc script migration chứa văn bản có dấu nháy đơn. Đừng dùng escape chuỗi làm biện pháp chống SQL injection trong ứng dụng – hãy dùng prepared statement với tham số ràng buộc. Escape định danh (tên bảng/cột) là vấn đề khác và không được hỗ trợ ở đây.
Escape chuỗi SQL hoạt động như thế nào
SQL chuẩn (ANSI; PostgreSQL, SQLite, SQL Server, Oracle và MySQL với NO_BACKSLASH_ESCAPES): mỗi ' thành ''; dấu gạch chéo ngược là ký tự thường và giữ nguyên. Chế độ MySQL (cấu hình mặc định của MySQL/MariaDB): \0, xuống dòng, ký tự về đầu dòng, gạch chéo ngược, ', " và Ctrl+Z (0x1A) được thêm dấu gạch chéo ngược phía trước, giống mysql_real_escape_string(). Ở chế độ chuẩn, ngắt dòng được giữ là ngắt dòng thật, điều này hợp lệ bên trong chuỗi SQL.
Các Trường Hợp Sử Dụng Phổ Biến
- Chèn tên như O'Reilly trong câu INSERT viết tay
- Viết script seed hoặc migration có văn bản chứa dấu nháy
- Chuẩn bị chuỗi ký tự cho bản dump MySQL
- Hiểu sự khác nhau giữa escape kiểu ANSI và MySQL
Lưu Ý Bảo Mật
Escape không thay thế được prepared statement. Mọi thứ chạy cục bộ; không có gì được gửi tới máy chủ.
Câu Hỏi Thường Gặp
Escape có đủ để chống SQL injection không?
Không. Hãy dùng truy vấn tham số hóa; escape dễ sai sót và phụ thuộc vào cấu hình máy chủ lẫn bộ ký tự.
Nên dùng chế độ nào cho PostgreSQL?
SQL chuẩn. Từ PostgreSQL 9.1, dấu gạch chéo ngược trong chuỗi thường được hiểu theo nghĩa đen.
Vì sao MySQL cần cách escape khác?
Mặc định MySQL coi dấu gạch chéo ngược là ký tự escape trong chuỗi, nên bản thân dấu gạch chéo ngược cũng phải được escape.