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% 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
:
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.
Eine einfache Möglichkeit, dies zu lösen, sind die Variablen mysql in Ihrem PHP-Dokument. So was: $ var = mysql_query ("SET @nun: = 0;");
Tags und Links sql php mysql mysqli mysql-variables