2012-03-19 25 views

Trả lời

16

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.

+0

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

+0

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

13

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.

+2

+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

+0

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

+0

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 :) –

Các vấn đề liên quan