Maison >base de données >tutoriel mysql >Pourquoi mes graphiques cfcharts ColdFusion sont-ils vides lors de l'utilisation de requêtes paramétrées avec des valeurs de date ?
La balise cfqueryparam de ColdFusion fournit un mécanisme pratique pour lier dynamiquement des valeurs à une requête SQL. Cependant, une utilisation inappropriée peut conduire à des résultats inattendus, tels que des CFCharts vides.
Lors du paramétrage d'une requête avec une valeur de date, il est essentiel de spécifier la valeur correcte. cfsqltype pour le paramètre. Comme démontré dans ce cas, l'utilisation d'un cfsqltype incorrect (par exemple, CF_SQL_TIMESTAMP) pour les comparaisons YEAR() et MONTH() peut perturber l'exécution de la requête.
Code incorrect :
<code class="coldfusion"><CFQUERYPARAM Value="#month#" cfsqltype="CF_SQL_TIMESTAMP"> <CFQUERYPARAM Value="#dateFormat(theMonth,"yyyy")#" cfsqltype="CF_SQL_TIMESTAMP"></code>
L'utilisation d'un mauvais type cfsql introduit une incompatibilité de type entre la valeur du paramètre et la colonne de comparaison dans la base de données. Par exemple, YEAR() renvoie un entier à quatre chiffres, tandis que CF_SQL_TIMESTAMP représente un objet date/heure complet. Cette incompatibilité entraîne une comparaison incorrecte :
<code class="text">2014 = {ts '2009-02-13 23:31:30'}</code>
La base de données sous-jacente convertit automatiquement la valeur du paramètre en nombre, ce qui entraîne une fausse comparaison et aucun enregistrement correspondant n'est trouvé pour la requête.
Pour résoudre le problème, spécifiez le cfsqltype approprié pour les paramètres, en vous assurant que le type de données correspond au type de colonne dans la base de données :
<code class="coldfusion"><CFQUERYPARAM Value="#month#" cfsqltype="CF_SQL_INTEGER"> <CFQUERYPARAM Value="#dateFormat(theMonth,"yyyy")#" cfsqltype="CF_SQL_INTEGER"></code>
Approche alternative :
Au lieu de paramétrer des composants de date individuels, la meilleure approche consiste à utiliser des comparaisons de dates avec cf_sql_date comme cfsqltype :
<code class="coldfusion"><CFQUERYPARAM Value="#dateFormat(theMonth,"yyyy-mm-dd")#" cfsqltype="CF_SQL_DATE"></code>
Cette approche est plus conviviale pour les index et garantit des comparaisons précises, que la colonne cible contienne une date ou une valeur date/heure.
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!