Frage

Ich habe eine harte Zeit, herauszufinden, warum, wenn der cfquery in meinem Code läuft es nur eine Zeile zurückgibt, wenn es drei Reihen zurückkehren sollte.

In fast allen Fällen diese cfquery kehrt die richtigen Daten. Für einen oder zwei Benutzer cfquery kehrt nur 1 Zeile (von 3). Ich nehme die Ausgabe aus den Debug-Informationen, dass Coldfusion ausspuckt und die Abfrage in Kröte laufen und die richtigen Ergebnisse angezeigt.

Was könnten die cfquery und Kröten Ergebnissen führen, anders zu sein? Eine der Spalten mir Rückkehr ist benutzerdefiniert und vielleicht die Spalte hat einige Sonderzeichen darin, dass das Ergebnis dazu führen, nicht zurückgegeben werden? Ich bin wirklich ratlos und niemand hier weiß jede Coldfusion selbst ich darüber nachdenken zu helfen. Also wende ich mich an SO.

ich im Internet bin auf der Suche, wie wir sprechen.

ADDED:

<cfquery name="getInfo" datasource="#DSN#">
    SELECT
        u.user_no, u.username, u.description
    FROM
        user_info u
    WHERE
        u.parent = #session.user_no#
    ORDER BY 
        u.username ASC
</cfquery>

Wieder ein wenige Benutzer es gibt eine Zeile von drei und auf dem Rest scheint es, die alle richtigen resuts zurückzukehren.

**** UPDATE **** Nicht, dass jemand kümmert, sondern nur Heute ist dieses Problem gelöst wurde! Wenn Sie wissen wollen, was es war, ich werde Ihnen sagen.

Schaltet den Tester aus, die dieses Stück Code zu testen wurde (die behaupteten, dass sie ihren Cache klaren!) Hat ihr Cache nicht klar! Sie hatte mich herumlaufen versuchen, es zu reparieren, wenn sie mir etwas B. S. fütterte das war das wahrscheinlich Problem, nachdem ich ihr gesagt. Na ja, ich nicht verbringen zu viel Zeit darauf. Vielen Dank an Alle für die Antworten über die cfqueryparam, wird ich die von nun an in meiner Coldfusion-Codierung verwendet werden.

Cheers!

War es hilfreich?

Lösung


Immer cfqueryparam um Variablen in Abfragen verwenden!

Richtig, nun, das ist aus dem Weg, es gibt nichts in diesem Code, der nur einer von drei Reihen verursachen wird zurückgeschickt werden.

Also, Ihr Problem ist entweder datenbezogene oder an anderer Stelle im Code.

Wenn Sie sofort danach Abfrage tun:

<cfdump var="#getInfo#"/><cfabort/>

Haben Sie eine Zeile oder drei Reihen bekommen?

  • Wenn es eine Zeile, die ein Datum Problem schon sagt - ich nicht-ascii ‚besondere‘ Zeichen bezweifle dies würden dazu führen, sondern nur versuchen, eine ganze Zahl zurückkehr das testen - oder sogar SELECT 1 ... - wenn es drei Reihen Sie würden drei 1s erhalten.

  • Wenn es drei Reihen gibt, muss es einige später Code sein, der das Problem verursacht, so würden wir müssen wissen, was als nächstes geschieht, um helfen zu können.

Sinn?

Andere Tipps

Ich würde verwenden cfqueryparam die Art der Variable zu definieren, die Sie in Ihre Abfrage eingeben.

Es schadet nie, mit Datenbankabfragen zu spezifisch zu sein, und ich habe kam über Probleme, bevor sie mit ganzen Zahlen als Strings ausgewertet wird und somit eine falsche Ergebnismengen zurück.

(Added (Haupt-) Bonus - cfqueryparam ist immer gut für zusätzlichen Schutz vor SQL-Injection-Angriffe)

Ich nehme an, die Fehler in den Daten oder Ihre Eingabe (SESSION Zeitüberschreitung / ungültig?).

Eigentlich hab ich nie Zeuge eines <cfquery> Ergebnis unterscheiden von dem, was der DB-Server Sie auf der Konsole sagen würde. Es ist nur so unwahrscheinlich, dass ich es eine Möglichkeit, nicht berücksichtigen würde.

Ich schlage vor, das folgende Testszenario:

<cfquery name="AllUsers" datasource="#DSN#>
  SELECT 
    p.user_no,
    COUNT(u.user_no) ChildCount
  FROM
    user_info p
    LEFT JOIN user_info u ON p.user_no = u.parent
  GROUP BY
    p.user_no
  ORDER BY
    COUNT(u.user_no)
</cfquery>

<cfdump var="#AllUsers#">

Dort sehen Sie genau, wie viele Kinder hat jeder Benutzer.

Wenn es Sie fühlen sich sicherer, können Sie eine Schleife laufen und überprüfen Sie die Ergebnisse im Einzelnen:

<cfloop query="AllUsers">
  <cfquery name="SingleUser" datasource="#DSN#">
    SELECT
      u.user_no, u.username, u.description
    FROM
      user_info u
    WHERE
      u.parent = #AllUsers.user_no#
  </cfquery>

  <cfif SingleUser.RecordCount neq AllUsers.ChildCount>
    <cfabort showerror="space-time rupture found for user #AllUsers.user_no#">
  </cfif>
</cfloop>

Meine Wette wäre, dass die <cfabort> getroffen werden nie werden, was das <cfquery> beweisen würde einwandfrei funktioniert und Sie würden woanders suchen.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top