2012-03-19 4 views

risposta

16

Il vantaggio principale è un ulteriore livello di controllo di integrità per gli input della query, prima di passare alla query. Inoltre, nel caso di valori di data e ora, credo che CF traduca correttamente le stringhe datetime nel formato di database corretto, se è specificato cfsqltype = "CF_SQL_DATE" o = "CF_SQL_TIMESTAMP".

Inoltre, penso che sia più chiaro per gli sviluppatori futuri vedere i tipi esclusi quando leggono il codice.

+0

CF tradurrà anche tutti i valori truey/falsey in CF_SQL_BIT (1 o 0) e qualsiasi valore numerico in CF_SQL_INT (arrotondamento). – Henry

+0

Grazie per una risposta ben espressa! Ho pensato che questi fossero alcuni dei motivi, ma non ho trovato la documentazione e questo è molto chiaro e conciso – froadie

13

Vorrei aggiungere al commento di Jake. Nella maggior parte degli RDBMS, il database dovrà eseguire la variabile tramite una ricerca del tipo per assicurare che sia del tipo corretto o che possa essere trasmesso implicitamente al tipo corretto. Un DB non lancia semplicemente una variabile di "tipo Qualsiasi" in una tabella o in una vista. Deve compilare la digitazione corretta nel piano di esecuzione. Quindi se non si fornisce un tipo si sta chiedendo al DB di "capirlo".

Considerando che, quando si specifica il tipo di pre-empt o pre-qualifica il tipo di dati. Il motore sa che il driver presenta una variabile di un certo tipo e può quindi utilizzarlo direttamente o derivarlo direttamente.

Ricorda che, mentre la sicurezza è una buona ragione per usare cfqueryparam, è solo una delle ragioni. L'altro motivo è creare istruzioni correttamente preparate che possano essere eseguite in modo efficiente e idealmente "inserire" la cache del piano di esecuzione sul server DB.

+2

+1. Ri: * .. stai chiedendo al DB di "capirlo". * .. ed i risultati non sono sempre quello che intendi. Meglio evitare la conversione implicita. – Leigh

+0

Grazie, buoni punti. Giusto per interesse: è il costo aggiuntivo extra per il database per abbinare i tipi di dati? (Come in, ci vorrà un po 'più tempo per funzionare senza cfsqltype perché il db deve passare il tempo "a comprenderlo?) – froadie

+0

Froadie - c'è qualche sovraccarico sì. Sarebbe piuttosto difficile da misurare ne sono sicuro. non lo vedresti, ma non c'è motivo per cui io possa pensare di NON usare cfsqltype :) –