2012-03-19 9 views

Respuesta

16

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.

+0

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

+0

¡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

13

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.

+2

+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

+0

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

+0

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

Cuestiones relacionadas