SQL – SE ESISTE AGGIORNAMENTO ELSE INSERISCI IN

Quello che sto cercando di fare è INSERT iscritti nel mio database, ma IF EXISTS dovrebbe UPDATE la riga, ELSE INSERT INTO .

Ovviamente mi collego al database per primo e GET il $name , $email e $birthday dalla stringa url.

 $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']; 

Funziona, ma aggiunge solo la nuova riga;

 mysqli_query($con,"INSERT INTO subs (subs_name, subs_email, subs_birthday) VALUES ('$name', '$email', '$birthday')"); mysqli_close($con); 

Ecco cosa ho provato;

 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); 

e

 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); 

e

 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); 

Ma nessuno di loro funziona, cosa sto sbagliando?

Qualsiasi aiuto è molto apprezzato!

  1. Crea un vincolo UNIQUE sulla tua colonna subs_email , se non ne esiste già una:

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

È ansible utilizzare la funzione VALUES (col_name) nella clausola UPDATE per fare riferimento ai valori di colonna dalla parte INSERT dell’INSERT … ON DUPLICATE KEY UPDATE – dev.mysql.com

  1. Si noti che ho usato i segnaposto dei parametri al posto dei letterali delle stringhe, poiché in realtà si dovrebbero usare istruzioni parametrizzate per difendersi dagli attacchi SQL injection .