Al codificar un cfqueryparam o cfprocparam, cfsqltype es opcional. Sin embargo, generalmente lo he visto codificado. ¿Hay algún beneficio en especificar cfsqltype?¿Está utilizando la buena práctica cfsqltype?
Respuesta
El beneficio principal es un nivel adicional de comprobación de cordura para las entradas de su consulta, antes de pasarlo a su consulta. Además, en el caso de los valores de fecha y hora, creo que CF traducirá adecuadamente cadenas de fecha y hora en el formato de base de datos adecuado, si se especifica cfsqltype = "CF_SQL_DATE" o = "CF_SQL_TIMESTAMP".
Además, creo que deja más claro para los futuros desarrolladores ver los tipos exceptuando cuando leen su código.
Me gustaría añadir al comentario de Jake. En la mayoría de los RDBMS, la base de datos deberá ejecutar su variable a través de una búsqueda de tipo para asegurarse de que sea del tipo adecuado o se pueda convertir al tipo apropiado implícitamente. Un DB no solo arroja una variable de "tipo Cualquiera" en una tabla o vista. Tiene que construir el tipeo correcto en el plan de ejecución. Entonces, si no proporciona un tipo, le está pidiendo al DB que lo "resuelva".
Considerando que, cuando especifica el tipo, está anulando o precalificando el tipo de datos. El motor sabe que el controlador presenta una variable de cierto tipo y puede usarlo directamente o derivarlo directamente.
Recuerde que, si bien la seguridad es una buena razón para usar cfqueryparam, es solo una razón. La otra razón es crear declaraciones correctamente preparadas que se puedan ejecutar de manera eficiente, e idealmente "pop" la caché del plan de ejecución en el servidor de bases de datos.
+1. Re: * ... le estás pidiendo al DB que "lo resuelva". * ... y los resultados no son siempre lo que pretendías. Es mejor evitar la conversión implícita. – Leigh
Gracias, buenos puntos. Solo por interés: ¿cuesta una sobrecarga adicional para la base de datos hacer coincidir los tipos de datos? (Como en, ¿tardará un poco más en ejecutarse sin cfsqltype porque el DB tiene que pasar tiempo "descifrándolo?) – froadie
Froadie - hay un poco de sobrecarga sí. Sería bastante difícil de medir estoy seguro. En la mayoría de los casos no lo verías, pero no hay ninguna razón por la que se me ocurra NO usar cfsqltype :) –
- 1. gcc: ¿Está utilizando -Werror y -pedantic como una buena práctica?
- 2. ¿Se está utilizando una mala práctica "básica" aunque podría ser buena para la legibilidad?
- 3. Delphi - FieldByName.AsString - buena práctica
- 4. Diseño de herencia utilizando Interface + clase abstracta. ¿Buena práctica?
- 5. ¿Está utilizando las propiedades get set de C# como una buena práctica?
- 6. ¿Está utilizando una instanciación de objeto como una buena práctica de valor de una entrada enum?
- 7. ¿Es la buena práctica del subdominio www?
- 8. Buena práctica para multi-threading
- 9. ¿Está utilizando etiquetas en mala práctica de JavaScript?
- 10. ¿Está utilizando miembros de matriz flexibles en C mala práctica?
- 11. ¿Está utilizando "NO EXISTE" una mala práctica de SQL?
- 12. ¿Está utilizando Spring AOP para iniciar sesión una buena idea?
- 13. ¿Está utilizando la instancia de Clase como clave de mapa una mejor práctica?
- 14. ¿Los diálogos modales son una buena práctica para la web?
- 15. ¿Buena práctica? iphone: datos de sincronización
- 16. ¿Los objetos inmutables son una buena práctica?
- 17. ASP.NET MVC - TempData - Buena o mala práctica
- 18. Python - buena práctica para detectar errores
- 19. Operador ternario: ¿mala o buena práctica?
- 20. Buena práctica de manejo de errores
- 21. ¿Es una buena práctica comparar la cadena C# con '=='?
- 22. ¿VERIFY (...) es una buena práctica en la codificación C++?
- 23. ¿Es la inicialización estática una buena práctica de programación?
- 24. Lógica en obtener parte de la propiedad. ¿Buena práctica?
- 25. ¿Es una buena práctica agregar nombres a __all__ utilizando un decorador?
- 26. ¿Está comprobando las excepciones en el código o utilizando try-catch una práctica mejor en Java?
- 27. Está utilizando objetos de transferencia de datos en ejb3 considerada como la mejor práctica
- 28. ¿Está utilizando 2 funciones de hash diferentes una buena manera de verificar la integridad del archivo?
- 29. ¿Es una buena práctica exportar variables en Perl?
- 30. Rails: ¿Por qué está protegido con_s_sclusivo_scopio? ¿Alguna buena práctica sobre cómo usarlo?
CF también traducirá cualquier valor de truey/falsey en CF_SQL_BIT (1 o 0) y cualquier valor numérico en CF_SQL_INT (redondeo). – Henry
¡Gracias por una respuesta bien expresada! Pensé que estas eran algunas de las razones, pero no pude encontrar la documentación y esto es muy claro y sucinto – froadie