Trong khi đi qua một số sách SQL tôi thấy rằng các ví dụ có xu hướng sử dụng dấu chấm hỏi (?
) trong truy vấn của họ. Nó đại diện cho cái gì?Dấu chấm hỏi biểu thị trong các truy vấn SQL là gì?
Trả lời
?
là thông số chưa đặt tên có thể được điền bởi chương trình chạy truy vấn để tránh SQL injection.
Bạn có thể cung cấp ví dụ về điều này không? – Brad
Thông thường nó đại diện cho thông số được cung cấp bởi ứng dụng khách.
Đó là thông số. Bạn có thể chỉ định nó khi thực hiện truy vấn.
Tôi không nghĩ rằng có bất kỳ ý nghĩa nào trong SQL. Bạn có thể nhìn vào các câu lệnh được chuẩn bị trong JDBC hoặc một cái gì đó. Trong trường hợp đó, dấu hỏi là phần giữ chỗ cho các tham số cho câu lệnh.
?
là để cho phép Truy vấn tham số. Các truy vấn được tham số hóa này là cho phép giá trị kiểu cụ thể khi thay thế ?
bằng giá trị tương ứng của chúng.
Đó là tất cả.
Dưới đây là một số reason lý do tại sao nên sử dụng Truy vấn tham số. Về cơ bản, nó dễ đọc và gỡ lỗi hơn.
Những gì bạn thấy là một truy vấn được tham số được tham số hóa. Chúng thường được sử dụng khi thực thi SQL động từ một chương trình.
Ví dụ, thay vì viết này (lưu ý: giả):
ODBCCommand cmd = new ODBCCommand("SELECT thingA FROM tableA WHERE thingB = 7")
result = cmd.Execute()
Bạn viết này:
ODBCCommand cmd = new ODBCCommand("SELECT thingA FROM tableA WHERE thingB = ?")
cmd.Parameters.Add(7)
result = cmd.Execute()
này có nhiều ưu điểm, như là lẽ hiển nhiên. Một trong những điều quan trọng nhất: các hàm thư viện phân tích các thông số của bạn là thông minh và đảm bảo rằng các chuỗi được thoát đúng cách. Ví dụ: nếu bạn viết thư này:
string s = getStudentName()
cmd.CommandText = "SELECT * FROM students WHERE (name = '" + s + "')"
cmd.Execute()
Điều gì xảy ra khi người dùng nhập mã này?
Robert'); DROP TABLE students; --
(trả lời là here)
Viết này thay vì:
s = getStudentName()
cmd.CommandText = "SELECT * FROM students WHERE name = ?"
cmd.Parameters.Add(s)
cmd.Execute()
Sau đó, thư viện sẽ khử trùng đầu vào, sản xuất này:
"SELECT * FROM students where name = 'Robert''); DROP TABLE students; --'"
Không phải tất cả của DBMS sử dụng ?
. MS SQL sử dụng tên thông số, mà tôi xem xét một sự cải thiện rất lớn :
cmd.Text = "SELECT thingA FROM tableA WHERE thingB = @varname"
cmd.Parameters.AddWithValue("@varname", 7)
result = cmd.Execute()
- 1. Cái gì \? (chuỗi dấu chấm hỏi dấu chấm hỏi) có nghĩa là chuỗi thoát?
- 2. "?" biểu tượng (dấu chấm hỏi) có nghĩa là trong Scala?
- 3. Câu hỏi cú pháp PHP: Dấu chấm hỏi và dấu hai chấm nghĩa là gì?
- 4. dấu chấm hỏi nhà điều hành trong các biểu thức
- 5. Các dấu chấm có ý nghĩa gì trong truy vấn SQL này?
- 6. Dấu mũ (^) thực hiện trong truy vấn SQL là gì?
- 7. Dấu chấm hỏi và dấu hai chấm trong câu? nó có nghĩa là gì?
- 8. Generics và dấu chấm hỏi
- 9. TortoiseSVN đang hiển thị trang trí Dấu chấm hỏi
- 10. Toán tử dấu hỏi chấm (?)
- 11. * * (dấu hai chấm dấu hoa thị) làm gì trong Ruby?
- 12. Dấu hoa thị trước dấu bằng có nghĩa là gì (* =)? Còn dấu chấm than thì sao?
- 13. attr_reader với dấu chấm hỏi trong tên
- 14. Sinatra và dấu chấm hỏi
- 15. Dấu chấm hỏi ở cuối tên tập tin có nghĩa là gì?
- 16. Erlang: Cú pháp chấm hỏi có nghĩa là gì?
- 17. cách vượt qua "dấu chấm hỏi" trong url javascript
- 18. Dấu chấm hỏi phù hợp trong quy tắc mod_rewrite regex
- 19. Tham số SQL và Dấu hỏi
- 20. Dấu chấm than đơn trong YAML là gì?
- 21. Khai báo biến dấu chấm hỏi
- 22. Truy vấn SQL động là gì và khi nào tôi muốn sử dụng truy vấn SQL?
- 23. Dấu hai chấm (:) nghĩa là gì?
- 24. Dấu chấm hỏi ở cuối css bao gồm url là gì?
- 25. Dấu hai chấm (':') có nghĩa là gì trong cú pháp SQL?
- 26. Làm gì !! (dấu chấm than đôi) có nghĩa là gì?
- 27. 3 dấu chấm trong tham số là gì?/Tham số biến số (...) là gì?
- 28. Thuật ngữ cho một phần của URL sau dấu chấm hỏi là gì?
- 29. SQL truy vấn câu hỏi: SELECT ... NOT IN
- 30. dấu chấm hỏi và ruột kết - nếu khác trong ruby
Ông có thể cung cấp mã cho truy vấn? – Gage
Tôi đoán đó là các biến trong các câu lệnh đã chuẩn bị, nhưng bạn nên đăng truy vấn cụ thể đó để chắc chắn. – kennytm
@ Mì lúa mì, nó chỉ đơn giản có nghĩa là bạn có thể nhận được sự giúp đỡ từ các thiên tài ở đây khá vui vẻ (nếu bạn cần câu trả lời chuyên gia). –