25 Mar 2008

Die alte Zicke!

Submitted by blizzz

Bin gerade dabei, naja schon gestern, eine Aktivierung via Bestätigungslink für ein Projekt einzubinden. Das Ding war auch ganz schnell durch, nur eine Sache verfolgt mich seit Stunden. Inzwischen glaub ich, dass es was persönliches gegen mich ist...

Der Einfacheit halber wird in einem Datenbankfeld ein AKtivierunscode gesetzt. Wird der Aktivierungslink in der Mail angeklickt, wird der Wert als Get-Parameter übergeben und mit 1 ersetzt, was dann als aktiviert gilt. Der PArt funktioniert einwandfrei:

Abhängig vom Erfolg oder Misserfolg muss aber eine entsprechende Ausgabe an den Benutzer erfolgen. Soll nicht das Problem sein. Bei einer UPDATE-Query werden die betreffenden Zeilen nicht zurückgegeben, dafür soll

mysql_affected_rows()

aufgerufen werden, optional mit der Verbindungsresource als Parameter. Im ersten Test ging es, seit dem gab es immer nur 0, 0, 0 und wieder 0 zurück.

Da mir eine schnelle Lösung reicht, wäre ein kleines Workaround vollkommen ausreichend. Nicht schön, aber was solls. Also mal ebend sowas verzapft:

Das wird vor und nach dem ersetzen des Aktivierungscodes aufgerufen, muss ─ ein korrekter Key gegeben ─ einmal 1 und einmal 0 ergeben. Das ganze hat auch einmal geklappt, seit dem sehen meine Debug Ausgaben ewiglich wie folgt aus. Zur Erklärung sei gesagt, die ersten beiden Zeilen (ja man kanns schlechts lesen, zum Debuggen reichts ja) geben die Querys aus, in der dritten Zeile die Rückgaben des ersten und des zweiten Aufrufes, dann der Aktivierungscode, alles kommasepariert wie man sieht. Tolle Wolle.

Kopiere ich mir diesen Aufruf aber und füge ihn in das SQL-Feld von PhpMyAdmin ein, so gibt es erwartungsgemäß den richtigen Wert 1 zurück. Man siehe und fühle sich bestätigt:

Und wo liegt der Hund nun begraben? Warum ging es einmal und nie wieder? Führt MySQL das Query intern später aus, ganz entgegen meiner Programmlogik? Was anderes sehe ich grad nicht... wenns so ist, wie bieg ich das hin? Und warum gings einmal mit mysql_affected_rows() und dann auch nie wieder? Der Befehl wird unmittelbar nach dem Update ausgeführt, also kann sowas doch nicht der Auslöser sein?!

Update

LIKE :-/
Tags: 

Add new comment