Các tài liệu MySQL nói rằng nó nên được \'
. Tuy nhiên, cả scite và mysql đều cho thấy ''
hoạt động. Tôi đã thấy điều đó và nó hoạt động. Tôi nên làm gì?
\'
là đặc thù của MySQL trong khi ''
tuân thủ ANSI SQL nếu tôi không nhầm
Các tài liệu MySQL nói rằng nó nên được \'
. Tuy nhiên, cả scite và mysql đều cho thấy ''
hoạt động. Tôi đã thấy điều đó và nó hoạt động. Tôi nên làm gì?
\'
là đặc thù của MySQL trong khi ''
tuân thủ ANSI SQL nếu tôi không nhầm
Câu trả lời:
Tài liệu MySQL mà bạn trích dẫn thực sự nói nhiều hơn một chút so với bạn đề cập. Nó cũng nói,
Một phạm vi phạm lỗi
'
bên trong một chuỗi được trích dẫn với phạm lỗi'
có thể được viết là''
hung phạm.
(Ngoài ra, bạn đã liên kết với phiên bản MySQL 5.0 của Bảng 8.1. Trình tự thoát ký tự đặc biệt và phiên bản hiện tại là 5.6 - nhưng Bảng 8.1 hiện tại . Trình tự thoát ký tự đặc biệt trông khá giống nhau.)
Tôi nghĩ rằng ghi chú Postgres trên backslash_quote (string)
tham số là thông tin:
Điều này kiểm soát xem một dấu ngoặc kép có thể được biểu diễn bằng
\'
một chuỗi bằng chữ hay không. Cách ưa thích, tiêu chuẩn SQL để biểu thị dấu ngoặc kép là nhân đôi nó (''
) nhưng PostgreQuery trong lịch sử cũng đã được chấp nhận\'
. Tuy nhiên, việc sử dụng\'
tạo ra rủi ro bảo mật ...
Điều đó nói với tôi rằng sử dụng một ký tự trích dẫn kép là một lựa chọn tổng thể và dài hạn tốt hơn so với sử dụng dấu gạch chéo ngược để thoát khỏi trích dẫn đơn.
Bây giờ nếu bạn cũng muốn thêm lựa chọn ngôn ngữ, lựa chọn cơ sở dữ liệu SQL và các yêu cầu không chuẩn của nó và lựa chọn khung truy vấn vào phương trình, thì bạn có thể kết thúc bằng một lựa chọn khác. Bạn không cung cấp nhiều thông tin về các ràng buộc của bạn.
SQL chuẩn sử dụng dấu ngoặc kép; MySQL phải chấp nhận điều đó để tuân thủ hợp lý.
'He said, "Don''t!"'
'
” bên trong một chuỗi trích dẫn với “ '
” có thể được viết như sau “ ''
” . Một phạm vi phạm lỗi "
bên trong một chuỗi được trích dẫn với phạm lỗi "
có thể được viết là ""
hung phạm. Đặt trước ký tự trích dẫn bởi một ký tự thoát (`` `).
Những gì tôi tin user2087510 có nghĩa là:
name = 'something'
name = name.replace("'", "\\'")
Tôi cũng đã sử dụng điều này với thành công.
Đây là một ví dụ:
SELECT * FROM pubs WHERE name LIKE "%John's%"
Chỉ cần sử dụng dấu ngoặc kép để kèm theo trích dẫn duy nhất.
Nếu bạn khăng khăng sử dụng dấu ngoặc đơn (và nhu cầu thoát ký tự):
SELECT * FROM pubs WHERE name LIKE '%John\'s%'
Có ba cách tôi nhận thức được. Cách thứ nhất không phải là đẹp nhất và thứ hai là cách phổ biến trong hầu hết các ngôn ngữ lập trình:
'I mustn''t sin!'
\
trước dấu ngoặc đơn '
:'I mustn\'t sin!'
"I mustn't sin!"
\'
sử dụng bởi rất nhiều ngôn ngữ lập trình, nhưng ''
được hỗ trợ bởi nhiều phương ngữ SQL hơn, vì vậy sử dụng tùy chọn 1 sẽ tốt hơn cho khả năng tương thích. Sqlite chẳng hạn không hoạt động với các dấu gạch chéo ngược.
Thay thế chuỗi
value = value.replace(/'/g, "\\'");
trong đó giá trị là chuỗi của bạn sẽ lưu trữ trong Cơ sở dữ liệu của bạn.
Thêm nữa,
Gói NPM cho điều này, bạn có thể xem xét nó
Tôi nghĩ rằng nếu bạn có bất kỳ điểm dữ liệu nào với dấu nháy đơn, bạn có thể thêm một dấu nháy đơn trước dấu nháy đơn
ví dụ. "Đây là nơi của John"
Ở đây MYSQL giả sử hai câu 'Đây là nơi của John'
Bạn có thể đặt 'Đây là nơi của John'. Tôi nghĩ rằng nó nên làm việc theo cách đó.
Trong PHP tôi thích sử dụng mysqli_real_escape_opes () để thoát các ký tự đặc biệt trong chuỗi để sử dụng trong câu lệnh SQL.
xem https://www.php.net/manual/en/mysqli.real-escape-opes.php
Có thể lạc đề, nhưng có lẽ bạn đến đây để tìm cách vệ sinh văn bản nhập từ một biểu mẫu HTML, để khi người dùng nhập ký tự dấu nháy đơn, nó sẽ không xuất hiện lỗi khi bạn cố gắng viết văn bản vào SQL bảng dựa trên DB. Có một số cách để làm điều này và bạn cũng có thể muốn đọc về SQL SQL, nhưng một tùy chọn đơn giản trong PHP là sử dụng hàm htmlspecialchars () sẽ chuyển đổi tất cả các dấu nháy đơn của bạn thành '
thứ bạn có thể lưu trữ dù sao.
''
hay\'
không?