2009-08-08 10 views
5

Ich benutze PHP und MySQL.Wie kann ich wissen, ob die letzte Operation insert oder update wurde, wenn in mysql und php ein duplicate update verwendet wurde?

Wenn ich eine INSERT ON DUPLICATE UPDATE SQL-Anweisung verwende, woher weiß ich dann, ob die letzte Operation eine erfolgreiche Einfügung war und nicht eine Aktualisierung oder eine fehlgeschlagene Einfügung?

Die Annahmen sind die Tabelle in Frage verwendet keine automatische Inkrement, so kann ich nicht mysql_insert_id verwenden, um mir zu helfen, herauszufinden.

Antwort

8

Sie sollten mysql_affected_rows() überprüfen, die bei einer Einfügung 1 und bei einer Aktualisierung 1 zurückgibt. Gemäß der mysql documentation.

if (mysql_affected_rows() == 1) //INSERT 
elseif (mysql_affected_row() == 2) //UPDATE 

Es sei denn, das Update nicht alles, in diesem Fall ändern 0.

+0

Würde mysql_affected_rows() wirklich 2 Return on UPDATE zurückkehren wird? –

+0

Ich habe mehrere Tests durchgeführt, und das ist es, was es für mich jedes Mal zurückgegeben hat, wenn es ein Update statt eines Einsatzes gemacht hat. Ob ich eine Spalte oder alle Spalten aktualisiert habe. Ich nehme an, es ist aus dem Grund, sagte ich, aber ich bin mir nicht ganz sicher. – Cahlroisse

+3

Es ist dokumentiert unter http://dev.mysql.com/doc/refman/5.0/en/insert-on-duplicate.html Mit ON DUPLICATE KEY UPDATE ist der betroffenen Zeilen Wert pro Zeile 1, wenn die Zeile ist als neue Zeile eingefügt und 2 wenn eine bestehende Zeile aktualisiert wird. – dmercredi