PHP und MySQL zeigen unterschiedliche Ergebnisse mit derselben Abfrage

8

Ich habe eine MySQL-Abfrage, die funktioniert, wenn sie direkt in meiner lokalen MySQL-Datenbank ausgeführt wird, zeigt aber ein anderes Ergebnis, wenn sie über PHP ausgeführt wird.

%Vor%

oder als Einzeiler:

%Vor%

Das Ergebnis:

%Vor%

Das PHP-Ergebnis:

%Vor%

a) count steigt nicht wie es sollte b) wegen a) es zeigt mehr Zeilen als es sollte (sollte auf 3 pro ID begrenzt werden)

Ich habe es mehrmals überprüft, beide Abfragen sind genau gleich. Es gibt keine Benutzereingaben oder irgendwelche Unterschiede in PHP.

Ich habe bereits ähnliche Fragen geprüft , aber keiner von ihnen half. Die folgenden Abfragen zeigen dasselbe Ergebnis sowohl für MySQL als auch für PHP:

%Vor%

Kennt jemand ein Problem, das diesen Unterschied beinhaltet?

Bearbeiten mit weiteren Informationen:

%Vor%

Ich habe es auch mit und ohne das Folgende versucht, bevor ich die Abfrage ausführe:

%Vor%     
tobi 05.11.2014, 10:46
quelle

2 Antworten

4

Ja. Die Reihenfolge der Auswertung von Ausdrücken in einer select -Klausel ist nicht garantiert. So können die Variablenzuweisungen in verschiedenen Reihenfolgen auftreten, abhängig davon, wie die Abfrage aufgerufen wird.

Sie können dies beheben, indem Sie alle Variablenzuweisungen in einen einzelnen Ausdruck einfügen. Verwenden Sie diese Unterabfrage für t :

%Vor%

Die genaue Erklärung in der Dokumentation lautet:

  

Als allgemeine Regel sollten Sie anders als in SET-Anweisungen niemals   Weisen Sie einer Benutzervariablen einen Wert zu und lesen Sie den Wert innerhalb derselben   Erklärung. Um beispielsweise eine Variable zu erhöhen, ist dies in Ordnung:

%Vor%      

Bei anderen Anweisungen wie SELECT erhalten Sie möglicherweise die Ergebnisse   erwarten, aber das ist nicht garantiert. In der folgenden Aussage, Sie   könnte denken, dass MySQL zuerst @a auswertet und dann ein   Zuordnungszweiter:

%Vor%      

Die Reihenfolge der Auswertung für Ausdrücke, die den Benutzer betreffen   Variablen sind undefiniert.

    
Gordon Linoff 05.11.2014 11:39
quelle
0

Eine einfache Möglichkeit, dies zu lösen, sind die Variablen mysql in Ihrem PHP-Dokument. So was: $ var = mysql_query ("SET @nun: = 0;");

    
Douglas Eller 15.12.2015 23:21
quelle