Khi mã hóa cfqueryparam hoặc cfprocparam, cfsqltype là tùy chọn. Tuy nhiên, tôi thường thấy nó được mã hóa. Có bất kỳ lợi ích để xác định cfsqltype?Có sử dụng thực hành tốt cfsqltype không?
Trả lời
Lợi ích chính là mức độ kiểm tra sanity bổ sung cho các mục nhập truy vấn của bạn, trước khi chuyển nó vào truy vấn của bạn. Ngoài ra, trong trường hợp giá trị thời gian ngày, tôi tin rằng CF sẽ dịch đúng chuỗi ngày giờ thành định dạng cơ sở dữ liệu thích hợp, nếu cfsqltype = "CF_SQL_DATE" hoặc = "CF_SQL_TIMESTAMP" được chỉ định.
Ngoài ra, tôi nghĩ điều này giúp các nhà phát triển trong tương lai rõ ràng hơn khi xem các loại ngoại trừ khi họ đọc mã của bạn.
Tôi sẽ thêm vào nhận xét của Jake. Trong hầu hết các RDBMS, cơ sở dữ liệu sẽ cần phải chạy biến của bạn thông qua một tra cứu kiểu để đảm bảo nó là kiểu thích hợp hoặc có thể được đúc thành kiểu thích hợp một cách ngầm định. Một DB không chỉ ném một biến "type Any" vào một bảng hoặc khung nhìn. Nó phải xây dựng cách gõ đúng vào kế hoạch thực hiện. Vì vậy, nếu bạn không cung cấp một loại bạn đang yêu cầu DB để "con số nó ra".
Trong khi đó, khi bạn chỉ định loại bạn đang làm trống trước hoặc loại trước loại dữ liệu. Động cơ biết rằng người lái xe đang trình bày một biến của một loại nhất định và sau đó có thể sử dụng nó trực tiếp hoặc lấy trực tiếp nó.
Hãy nhớ rằng, trong khi bảo mật là lý do chính đáng để sử dụng cfqueryparam, thì đó chỉ là một lý do. Lý do khác là tạo các câu lệnh được chuẩn bị chính xác có thể thực thi hiệu quả - và lý tưởng là "pop" bộ nhớ đệm kế hoạch thực thi trên máy chủ DB.
+1. Re: * .. bạn đang yêu cầu DB "tìm ra nó". * .. và kết quả không phải lúc nào cũng là ý của bạn. Tốt hơn để tránh chuyển đổi tiềm ẩn. – Leigh
Cảm ơn bạn, những điểm tốt. Chỉ cần quan tâm - liệu nó có tốn thêm chi phí cho cơ sở dữ liệu để phù hợp với các kiểu dữ liệu không? (Như trong, nó sẽ mất nhiều thời gian hơn để chạy mà không có cfsqltype vì db phải dành thời gian "tìm ra nó?) – froadie
Froadie - có một số chi phí có. Nó sẽ là khá khó khăn để đo tôi chắc chắn. bạn sẽ không nhìn thấy nó.Nhưng không có lý do tôi có thể nghĩ đến để không sử dụng cfsqltype :) –
- 1. Thực hành tốt có sử dụng cụm từ thông dụng để xác thực đầu vào không?
- 2. Thực hành không tốt để sử dụng tự trang trí?
- 3. Thực hành tốt về REPLACE INTO có tốt không?
- 4. Có sử dụng dấu ngắt có ghi là một thực hành tốt trong Java không?
- 5. Thực hành không tốt? Sử dụng không chính thức câu lệnh sử dụng C#
- 6. Thực hành tốt nhất để sử dụng @ trong C#
- 7. C# IDisposable Sử dụng: Thực hành tốt nhất
- 8. Có thực hành tốt để sử dụng toán tử xor để kiểm tra boolean không?
- 9. Thực hành tốt có sử dụng gif động trong các hình ảnh css không?
- 10. Có thực hành tốt để sử dụng enum như int không?
- 11. Có thực hành tốt để sử dụng size_t trong C++ không?
- 12. Đang sử dụng '!!' trong thực hành tốt C/C++ và nó có phổ biến không?
- 13. Có sử dụng mapM/sequence được coi là thực hành tốt không?
- 14. Có thực hành tốt để sử dụng std :: size_t khắp nơi không?
- 15. Có sử dụng các lớp CSS để đánh dấu JS là một thực hành không tốt?
- 16. Android "Thực hành tốt nhất" sử dụng Intents
- 17. là một thực hành tốt để sử dụng mysql_free_result ($ result)?
- 18. Khởi tạo tĩnh có thực hành lập trình tốt không?
- 19. ViewHolder - thực hành tốt
- 20. Có phải "ném ngoại lệ" thực hành không tốt?
- 21. WSDL - không có đầu vào - thực hành tốt nhất
- 22. IEnumerable & Thực hành tốt (& WCF)
- 23. Thực hành tốt nhất khi không thực hiện IValueConvert.ConvertBack
- 24. Delphi - FieldByName.AsString - thực hành tốt
- 25. htaccess thực hành tốt nhất
- 26. thực hành tốt nhất để sử dụng url hành động trong khi gọi ajax trong cakePHP
- 27. Sử dụng câu lệnh sử dụng với WinForms ... Thực hành tốt?
- 28. Thực hành tốt nhất để viết mã có thể tái sử dụng
- 29. Có được coi là thực hành không tốt để thực hiện HTTP POST không có nội dung thực thể không?
- 30. Thực hành tốt của Makefile
CF cũng sẽ dịch bất kỳ giá trị truey/falsey nào thành CF_SQL_BIT (1 hoặc 0) và bất kỳ giá trị số nào thành CF_SQL_INT (làm tròn). – Henry
Cảm ơn bạn đã trả lời rõ ràng! Tôi cho rằng đây là một số lý do, nhưng không thể tìm thấy tài liệu và điều này rất rõ ràng và ngắn gọn – froadie