2009-04-09 14 views
1

Ich habe ein Formular, um Daten in eine Datenbank einzufügen. Dieses Formular übernimmt den Inhalt der Felder und zeigt dann die Ergebnisseite mit den eingegebenen Informationen im Kontext an. Auf dieser Seite gibt es einen Link zum Bearbeiten der Benutzerinformationen, die zum vorherigen Formular zurückgehen. Offensichtlich möchte ich keine doppelten Datensätze einfügen. Gibt es eine einfache Möglichkeit, eine Update-Anweisung zu verwenden, wenn ein Datensatz bereits existiert? Ich mache das mit Ajax und PHP.sql einfügen und aktualisieren Frage

Antwort

2

MySQL unterstützt das Hinzufügen von ON DUPLICATE KEY UPDATE zu einer INSERT-Anweisung, die tun soll, was Sie wollen.

5

Werfen Sie einen Blick auf:

INSERT ... ON DUPLICATE ermöglicht es Ihnen, eine Aktualisierungsabfrage, wenn ein eindeutiger Index für die Erteilung oder PRIMÄRSCHLÜSSEL ist abgestimmt.

REPLACE funktioniert genau gleich, aber wenn die Zeile gefunden wird, wird die alte Zeile vor dem Einsetzen eines neuen gelöscht. Bei der Verwendung von Cascading Deletes ist dies besonders zu beachten!

1

Angenommen, Sie haben ein Feld wie "Benutzername" oder "E-Mail", können Sie dieses Feld verwenden, um zu prüfen, ob ein Datensatz bereits existiert, wenn dies der Fall ist, aktualisieren Sie es.

$res = mysql_query("SELECT primary_key FROM my_table WHERE `email` = '" . mysql_real_escape_string($email) . "'"); 

if($row = mysql_fetch_array($res)) 
{ 
    // Record exists, update it 
    $q = "UPDATE my_table SET `username` = '" . mysql_real_escap_string($username) . "' WHERE primary_key = " . (int) $row['primary_key']; 
} 
else 
{ 
    // Record doesn't exist, insert 
    $q = "INSERT INTO my_table(username, email) VALUES('" . mysql_real_escape_string($username) . "', '" . mysql_real_escape_string($email) . "');"; 
} 

Im obigen Beispiel nehme ich an, dass Sie ein Primärschlüsselfeld haben, das eine Ganzzahl (primary_key) ist.

+0

Warum verwenden Sie keine parametrisierten Abfragen? –

0

Sie sollten einen ORM wie http://www.ezpdo.net/blog/?p=2 verwenden Plain SQL in Web-Anwendungen sollte nur verwendet werden, wenn absolut notwendig, allein aus Sicherheitsgründen, aber auch um Probleme wie Ihres zu vermeiden.