Wat ik probeer te doen is INSERT
abonnees in mijn database, maar IF EXISTS
het zou de rij UPDATE
moeten ELSE INSERT INTO
een nieuwe rij.
Natuurlijk maak ik eerst verbinding met de database en GET
de $name
, $email
en $birthday
van de url-tekenreeks.
$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'];
Dit werkt, maar voegt alleen de nieuwe rij toe;
mysqli_query($con,"INSERT INTO subs (subs_name, subs_email, subs_birthday)
VALUES ('$name', '$email', '$birthday')");
mysqli_close($con);
Dit is wat ik heb geprobeerd;
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);
en
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);
en
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);
Maar geen van alle werkt, wat doe ik verkeerd?
Alle hulp wordt zeer op prijs gesteld!
Antwoord 1, autoriteit 100%
-
Maak een
UNIQUE
-beperking in uwsubs_email
kolom, als deze nog niet bestaat:ALTER TABLE subs ADD UNIQUE (subs_email)
-
Gebruik
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)
U kunt de functie VALUES(col_name) in de UPDATE-component gebruiken om
verwijzen naar kolomwaarden uit het INSERT-gedeelte van de INSERT … ON
DUBBELE SLEUTEL-UPDATE – dev.mysql.com
- Merk op dat ik tijdelijke aanduidingen voor parameters heb gebruikt in plaats van letterlijke tekenreeksen, aangezien men echtgeparametriseerde instructies zou moeten gebruiken voor verdedigen tegen SQL-injectie-aanvallen.
Antwoord 2
Probeer dit:
INSERT INTO `center_course_fee` (`fk_course_id`,`fk_center_code`,`course_fee`) VALUES ('69', '4920153', '6000') ON DUPLICATE KEY UPDATE `course_fee` = '6000';