BigDaddyXD Geschrieben 17. März 2009 Teilen Geschrieben 17. März 2009 Hallo zusammen, ich habe in einem meiner Serverscripte ein Problem. Sinn des Scriptes ist es, Accounts mit derselben "letzten IP" einem "mainlogin" zuzuweisen, sodass man alle Accounts eines Benutzers zuordnen kann. Soweit so, eigentlich, einfach. Dazu nutze ich folgendes Script: $query = "SELECT login, lastIP, mainlogin FROM accounts WHERE (mainlogin='' OR mainlogin=login) AND lastIP!='' ORDER BY lastIP DESC, login DESC"; $result = mysql_query($query) or die(mysql_error()); $llastIP = ""; $lastlogin = ""; $numedits=0; while ($data = mysql_fetch_array($result, MYSQL_ASSOC)) { $curip = $data['lastIP']; $curlogin = $data['login']; $curmainlogin = $data['mainlogin']; $query2 = "SELECT login FROM accounts WHERE lastIP='$curip' ORDER BY login DESC"; $result2 = mysql_query($query2) or die(mysql_error()); $numaccswithip = mysql_num_rows($result2); if ($numaccswithip==1) { if ($curmainlogin=="") { echo $curlogin." ".$curmainlogin." ".$curip."<br>"; } $query1 = "UPDATE accounts SET mainlogin='".$curlogin."' WHERE login='".$curlogin."'"; $result1 = mysql_query($query1) or die(mysql_error()); } else { $data1 = mysql_fetch_array($result2, MYSQL_ASSOC); $newmainlogin = $data1['login']; $query1 = "UPDATE accounts SET mainlogin='".$newmainlogin."' WHERE lastIP='".$curip."'"; $result1 = mysql_query($query1) or die(mysql_error()); } $llastIP = $curip; $lastlogin = $curlogin; $numedits=$numedits+1; } echo"Zusammengehoerige Accounts wurden markiert... $numedits<br>";[/PHP] Dieses Script hat auch immer prima funktioniert, doch seit einiger Zeit, werden NEU angemeldete Accounts von dem Script nichtmehr behandelt! Gibt es irgendwie ein maximum an Datensätzen der über PHP oder eine SQL- Anforderung bearbeitet werden kann? Ich kann mit schlucht und ergreifend nicht erklären warum knapp über 800 Accounts damit korrekt bearbeitet werden, aber alle neu dazukommenden Accounts einfach unbeachtet bleiben... Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
flashpixx Geschrieben 17. März 2009 Teilen Geschrieben 17. März 2009 "Läuft nicht" ist keine aussagekräftige Fehlermeldung. Was hat sich an der Umgebung geändert, welche Warnings / Error zeigt das Script, usw. Phil Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
Shadowman Geschrieben 17. März 2009 Teilen Geschrieben 17. März 2009 (bearbeitet) Stehen die neuen Accounts bereits in der Datenbank? Wie sieht ein Datensatz aus, der funktioniert? Wie sieht ein Datensatz aus, der nicht funktioniert? Gibt es Fehlermeldungen? Wurde die PHP Version gewechselt? Wird eine andere Server Applikation verwendet? Bitte einfach mal genauere Informationen schreiben EDIT: Übrigens brauchst du in der Zeile while ($data = mysql_fetch_array($result, MYSQL_ASSOC)) { das MYSQL_ASSOC nicht zu schreiben. mysql_fetch_array kann einen Zugriff via Indizes und Assiziationen verarbeiten, da MYSQL_BOTH als default definiert ist. MYSQL_BOTH: Funktionsergebnis ist ein Array, das die Elemente des Ergebnisdatensatzes sowohl assoziativ als auch numerisch indiziert enthält. Dies ist der Default-Wert. Bearbeitet 17. März 2009 von Shadowman Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
BigDaddyXD Geschrieben 17. März 2009 Autor Teilen Geschrieben 17. März 2009 Es gibt keine Fehlermelung, keinen Fehler oder sonstwas. Das Script läuft durch wie imemr schon, und die Accountzuordnung wird auch aktualisiert, aber nur bis zu einer bestimmten Menge an Datensätzen. Obwohl das Script korrekt ist, werden neuere Datensätze einfach nicht behandelt... Insgesammt umfasst die Datenbank an die 3000 Accounts, wovon aber ca 1000 keine "lastIP" haben und damit von der Abfrage ausgeschlossen sind. Auf mich macht es den Eindruck dass die Verarbeitung der Datensätze einfach an einem besstimmten Punkt aufhört, als gäbe es einen Maximalwert, sagen wir mal "höchstens 1500 Datensätze pro Abfrage dürfen aktualisiert werden", was aber natürlich Blödsinn wäre. Und nochmal anders formuliert, damit es auch auf jeden Fall verstanden werden kann ... Als ich sagen wir mal noch 1500 Accounts hatte, hat das Script allen Datensätzen ihren mainlogin zugewiesen, ganz zuverlässing und ohne Ausnahme. Irgendwann hat das Script neuere Accounts aber einfach "ignoriert". Lösche ich jetzt z.b. aus einem "alten" Account das mainlogin raus, und habe gleichzeitig auchnoch einen "neuen" Account, der auch noch keinen hat und lasse das Script dann laufen, dann bekomtm der alte Account wieder ein mainlogin zugeordnet, der neue aber nicht! Sehr komische Sache, wie gesagt, hat irgendwie was von einem erreichten Limit, aber das kann ich fast net glauben... Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
flashpixx Geschrieben 17. März 2009 Teilen Geschrieben 17. März 2009 Ohne Fehlermeldung ist so keine Hilfe möglich. Führe das Statement direkt auf der Datenbank aus, ohne PHP zu verwenden. Was passiert? Phil Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
BigDaddyXD Geschrieben 17. März 2009 Autor Teilen Geschrieben 17. März 2009 Okay, ich konnte das Problem lösen. Wie gesagt, es GIBT keine Fehlermeldung, und die Abfragen sind auch 100% korrekt. Das Problem lag in der Tabellendefinition. mainlogin hatte die Erlaubnis "null" zu sein. Nachdem ich "null" verboten habe läuft es nun bei ALLEN Accounts... Merkwürdig trotzdem warum es bei so vielen Accounts auch mit null geklappt hat, aber dann plötzlich nichtmehr... Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
flashpixx Geschrieben 17. März 2009 Teilen Geschrieben 17. März 2009 Kann es sein, dass Deine PHP Variable leer ist also "" und das ist != null !? Weil soweit ich das weiß wird bei ".. where xyz='$myvar' " wenn $myvar == null ist logischerweise: "where xyz = '' " ausgeführt und nicht "where xyz = NULL" Phil Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
BigDaddyXD Geschrieben 17. März 2009 Autor Teilen Geschrieben 17. März 2009 Fast, es ist genau anders herum ^^ An dieser Stelle: WHERE (mainlogin='' OR mainlogin=login) überprüft die SQL-Abfrage ob mainlogin leer ist. Bei neuen Accounts war mainlogin aber null und nicht leer. Das ist nun fixed ^^ Danke jedenfalls für die schnellen Reaktionen. Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
flashpixx Geschrieben 17. März 2009 Teilen Geschrieben 17. März 2009 Du solltest ggf darauf achten, dass Du richtig quotest. War mir ja klar, dass ich es verdrehe :upps Phil Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
Empfohlene Beiträge
Dein Kommentar
Du kannst jetzt schreiben und Dich später registrieren. Wenn Du ein Konto hast, melde Dich jetzt an, um unter Deinem Benutzernamen zu schreiben.