Ein paar Mal in meiner Funktion Ich habe Sachen wie diese:Var Scoping-Problem möglicherweise?
<cffunction name="mergeData">
<cfquery name="myQuery">
SELECT columnName FROM tableName
</cfquery>
<cfquery dbtype="query" name="myOtherQuery">
SELECT columnName FROM myQuery
</cfquery>
</cffunction>
<cfset resulta = mergeData(queryA) />
<cfset resultb = mergeData(queryB) />
<cfset resultc = mergeData(queryC) />
Gelegentlich dann erhalte ich die Fehler The select column reference [myQuery.columnname] is not found in table [myQuery].
Also, was dies verursacht werden könnte. Wie kann ich diagnostizieren? Ich dachte, es könnte ein Scoping-Problem sein, also werde ich <cfquery name="local.myQuery">
hinzufügen, nur um sicherzustellen, dass die Dinge in der Funktion enthalten sind (ich sollte das sowieso wahrscheinlich tun). Aber wenn etwas nur passiert, fällt es mir manchmal schwer herauszufinden, wie man es diagnostiziert.
BEARBEITEN: Ein wenig Klarheit darüber, warum es sich höchstwahrscheinlich um ein Scoping-Problem handelt. Mein Gedanke ist, dass myQuery
möglicherweise in anderen Anrufen referenziert wird. Ich meine, es ist nicht so, als würde es mehrere Threads auf den Daten laufen lassen, aber ist es möglich, dass das der Grund sein könnte? Gibt es andere Ursachen? Dies ist nicht immer der Fall, wenn ich den Fehler erhalte. Ich bekomme es auch auf einer Seite, wo es nur einmal läuft.
Ich lokalisierte alles lokal, machte die Variablennamen einzigartig für jede Funktion und die Fehler gingen weg. (zumindest in den letzten 5 Stunden.) Ich hoffe, das bedeutet, dass es das Problem war. – Leeish