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
MySQL unterstützt das Hinzufügen von ON DUPLICATE KEY UPDATE zu einer INSERT-Anweisung, die tun soll, was Sie wollen.
Werfen Sie einen Blick auf:
INSERT ... ON DUPLICATE
: http://dev.mysql.com/doc/refman/5.0/en/insert-on-duplicate.htmlREPLACE INTO
: http://dev.mysql.com/doc/refman/5.0/en/replace.html
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!
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.
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.
- 1. T-SQL Einfügen oder Aktualisieren
- 2. SQL Server: EINFÜGEN, AKTUALISIEREN, LÖSCHEN, ERSTELLEN Timeouts
- 3. SQL Server Stored Procedure überprüfen Bedingung und aktualisieren/einfügen
- 4. Oracle-SQL-Merge zum Einfügen und Löschen, aber nicht aktualisieren
- 5. SQL-Abfrage einfügen und aktualisieren auf doppelte Schlüssel
- 6. NHibernate: Datumsangaben einfügen und aktualisieren
- 7. Einfügen und Aktualisieren von SharedPreferences
- 8. Gleichzeitiges Einfügen und Aktualisieren Postgres
- 9. PHP einfügen und aktualisieren auf mehrere Abfrage und Tabelle
- 10. SQLITE - Frage einfügen
- 11. Aktualisieren oder Einfügen von Problemen in SQL Server?
- 12. Entity SaveChanges() für beide einfügen und aktualisieren?
- 13. Einfügen und Aktualisieren zur gleichen Zeit
- 14. SQL Server-Schleife und in SQL einfügen
- 15. PHP MYSQL Einfügen/Aktualisieren
- 16. Einfügen/Aktualisieren von Massendaten in SQL-Tabelle in Entity Framework
- 17. SQL multi-Befehl Atomarität Frage
- 18. Archivierung Produktion DB Einfügen/Aktualisieren mit SQL Server 2008
- 19. SQL-Schleife durch Tabelle A & Einfügen/Aktualisieren in Tabelle B
- 20. einfache Frage über SQL Server und C#
- 21. SQL: Datumsformat und Case-Anweisung Frage
- 22. SQL/PHP: Tabelle Design Frage
- 23. SQL-Modellierung/Abfrage Frage
- 24. SQL grundlegende Abfrage Frage
- 25. SQL-Frage zum Zählen
- 26. Komplizierte SQL-Abfrage Frage
- 27. SQL Retrieval Frage
- 28. T-SQL-Gruppierung Frage
- 29. Oracle SQL Query Frage
- 30. Frage zu SQL-Triggern
Warum verwenden Sie keine parametrisierten Abfragen? –