SQL – INDIEN BESTAAT UPDATE ANDERS INVOEREN

Wat ik probeer te doen is INSERTabonnees in mijn database, maar IF EXISTShet zou de rij UPDATEmoeten ELSE INSERT INTOeen nieuwe rij.

Natuurlijk maak ik eerst verbinding met de database en GETde $name, $emailen $birthdayvan 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%

  1. Maak een UNIQUE-beperking in uw subs_emailkolom, als deze nog niet bestaat:

    ALTER TABLE subs ADD UNIQUE (subs_email)
    
  2. 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

  1. 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';

Other episodes