Das cfqueryparam-Tag von ColdFusion bietet einen praktischen Mechanismus zum dynamischen Binden von Werten an eine SQL-Abfrage. Eine unsachgemäße Verwendung kann jedoch zu unerwarteten Ergebnissen führen, beispielsweise zu leeren CFCharts.
Bei der Parametrisierung einer Abfrage mit einem Datumswert ist es wichtig, den richtigen Wert anzugeben cfsqltype für den Parameter. Wie in diesem Fall gezeigt, kann die Verwendung eines falschen cfsqltype (z. B. CF_SQL_TIMESTAMP) für die YEAR()- und MONTH()-Vergleiche die Ausführung der Abfrage stören.
Falscher Code:
<code class="coldfusion"><CFQUERYPARAM Value="#month#" cfsqltype="CF_SQL_TIMESTAMP"> <CFQUERYPARAM Value="#dateFormat(theMonth,"yyyy")#" cfsqltype="CF_SQL_TIMESTAMP"></code>
Die Verwendung des falschen cfsqltype führt zu einem Typkonflikt zwischen dem Parameterwert und der Vergleichsspalte in der Datenbank. Beispielsweise gibt YEAR() eine vierstellige Ganzzahl zurück, während CF_SQL_TIMESTAMP ein vollständiges Datums-/Uhrzeitobjekt darstellt. Diese Nichtübereinstimmung führt zu einem falschen Vergleich:
<code class="text">2014 = {ts '2009-02-13 23:31:30'}</code>
Die zugrunde liegende Datenbank wandelt den Parameterwert automatisch in eine Zahl um, was zu einem falschen Vergleich führt und keine passenden Datensätze für die Abfrage gefunden werden.
Um das Problem zu beheben, geben Sie den entsprechenden cfsqltype für die Parameter an und stellen Sie sicher, dass der Datentyp mit dem Spaltentyp in der Datenbank übereinstimmt:
<code class="coldfusion"><CFQUERYPARAM Value="#month#" cfsqltype="CF_SQL_INTEGER"> <CFQUERYPARAM Value="#dateFormat(theMonth,"yyyy")#" cfsqltype="CF_SQL_INTEGER"></code>
Alternativer Ansatz :
Als Alternative zur Parametrisierung einzelner Datumskomponenten besteht der bessere Ansatz darin, Datumsvergleiche mit cf_sql_date als cfsqltype zu verwenden:
<code class="coldfusion"><CFQUERYPARAM Value="#dateFormat(theMonth,"yyyy-mm-dd")#" cfsqltype="CF_SQL_DATE"></code>
Dieser Ansatz ist indexfreundlicher und sorgt für genaue Vergleiche, unabhängig davon, ob die Zielspalte ein Datum oder einen Datums-/Uhrzeitwert enthält.
Das obige ist der detaillierte Inhalt vonWarum sind meine ColdFusion-CFCharts leer, wenn ich parametrisierte Abfragen mit Datumswerten verwende?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!