2010-05-15 4 views
5
aktualisiert

Was ich versuche zu tun: (programmatisch)mysql_affected_rows() gibt immer 1, obwohl keine Zeile wurde

Update-Status, wo id etwas ist, wenn keine Zeilen, in denen aktualisiert, Fehler geben: Wir können das nicht finden notieren Sie mit id etwas, andernfalls geben Sie Nachricht Erfolg.

Hier verwende ich mysql_affected_rows(), um zu wissen, ob eine Zeile aktualisiert wurde oder nicht, aber sie gibt immer 1 zurück, so dass der Benutzer eine Erfolgsmeldung erhält, obwohl keine Zeile aktualisiert wurde.

Kann mir jemand sagen, was könnte es sein?

Hier ist der Code:

function update_sql($sql) { 


    $this->last_query = $sql; 

    $r = mysql_query($sql); 

    if (!$r) { 
    $this->last_error = mysql_error();   
    return false; 
    }  
    $rows = mysql_affected_rows(); 
    if ($rows == 0) return true; // no rows were updated 
    else return $rows; } 

Dieser Code gibt 1.

+0

Können Sie uns bitte den Code zeigen, in dem dies geschieht? –

Antwort

4

Das liegt daran, dass true wird als "1" ausdrucken, wenn Sie echo verwenden. Zum Debuggen versuchen Sie var_dump(), oder lassen Sie Ihre Funktion 0 zurück (was mir in diesem Fall die bessere Option scheint).

Eine kleine Anmerkung; Ich denke, Sie sollten versuchen, Ihren Code ein wenig lesbarer zu machen (wenn der Code in Ihrer Frage das gleiche Layout wie der Code in Ihrer Datei hat). Versuchen Sie, Codeblöcke einrücken, verwenden getrennte Leitungen für geschweiften Klammern schließen, etc ...

+0

+1 Gut ausgebildete Vermutung angesichts des Mangels an Informationen in der Frage. –

+0

Danke für den Vorschlag, ich werde es versuchen. Der Code sah in meinem Editor korrekt aus, aber ich hatte Mühe, ihn hier einzufügen. – happyhardik

+0

Okay, in diesem Fall ignorierst du meine kleine Notiz :) –

2

Dies ist nur eine Vermutung ...

Vielleicht ist Ihre Funktion funktioniert wie ausgenommen? Vielleicht funktioniert dieses Stück Code if ($rows == 0) return true; gut, und gibt true zurück, aber Sie behandeln diesen Wert als Ganzzahl (Boolean True kann als 1 angezeigt werden)? Do: var_dump(uddated_sql('YOUR QUERY')) und prüfen, ob es einen Wahrheitswert oder einen Ganzzahlwert 1 zurückgibt.

Verwandte Themen