Was ich versuche, sind INSERT
Abonnenten in meiner Datenbank, aber IF EXISTS
es sollte UPDATE
die Zeile ELSE INSERT INTO
eine neue Zeile sein.
Ofcourse ich auf die Datenbank zuerst und verbinden GET
das $name
, $email
und $birthday
aus dem URL - String.
$con=mysqli_connect("localhost","---","---","---");
// Check connection
if (mysqli_connect_errno())
{
echo "Failed to connect to MySQL: " . mysqli_connect_error();
}
$name=$_GET['name'];
$email=$_GET['email'];
$birthday=$_GET['birthday'];
Dies funktioniert, fügt jedoch nur die neue Zeile hinzu.
mysqli_query($con,"INSERT INTO subs (subs_name, subs_email, subs_birthday)
VALUES ('$name', '$email', '$birthday')");
mysqli_close($con);
Folgendes habe ich versucht:
mysqli_query($con,"INSERT INTO subs (subs_name, subs_email, subs_birthday)
VALUES '$name', '$email', '$birthday'
ON DUPLICATE KEY UPDATE subs_name = VALUES($name), subs_birthday = VALUES($birthday)");
mysqli_close($con);
und
mysqli_query($con,"IF EXISTS (SELECT * FROM subs WHERE subs_email='$email')
UPDATE subs SET subs_name='$name', subs_birthday='$birthday' WHERE subs_email='$email'
ELSE
INSERT INTO subs (subs_name, subs_email, subs_birthday) VALUES ('$name', '$email', '$birthday')");
mysqli_close($con);
und
mysqli_query($con,"IF NOT EXISTS(SELECT * FROM subs WHERE subs_email='$email')
Begin
INSERT INTO subs (subs_name, subs_email, subs_birthday)
VALUES ('$name', '$email', '$birthday')
End");
mysqli_close($con);
Aber keiner von ihnen funktioniert, was mache ich falsch?
Jede Hilfe wird sehr geschätzt!
Antworten:
Erstellen Sie eine
UNIQUE
Einschränkung für Ihresubs_email
Spalte, falls noch keine vorhanden ist:ALTER TABLE subs ADD UNIQUE (subs_email)
Verwendung
INSERT ... ON DUPLICATE KEY UPDATE
:INSERT INTO subs (subs_name, subs_email, subs_birthday) VALUES (?, ?, ?) ON DUPLICATE KEY UPDATE subs_name = VALUES(subs_name), subs_birthday = VALUES(subs_birthday)
quelle
VALUES()
Klausel. DieVALUES()
Funktion übernimmt nur den Namen der Spalte, deren Wert aus derVALUES()
Klausel stammt, die Sie verwenden möchten: Es ist lediglich eine Abkürzung, um zu verhindern, dass Sie sich wiederholen. du musst es nicht benutzen. Sie können Ihre Funktion einfach direkt in derSET
Klausel verwenden, wenn Sie möchten, zSET column = MYFUNCTION()
.REPLACE
wenn ich es wirklich beabsichtige aktualisieren. Denken Sie an Knuths Maxime: " Vorzeitige Optimierung ist die Wurzel allen Übels" .ON DUPLICATE KEY UPDATE
ist der Wert für betroffene Zeilen pro Zeile 1, wenn die Zeile als neue Zeile eingefügt wird, 2, wenn eine vorhandene Zeile aktualisiert wird, und 0, wenn eine vorhandene Zeile auf ihre aktuellen Werte gesetzt wird. "Versuche dies:
INSERT INTO `center_course_fee` (`fk_course_id`,`fk_center_code`,`course_fee`) VALUES ('69', '4920153', '6000') ON DUPLICATE KEY UPDATE `course_fee` = '6000';
quelle