SQL – SE EXISTA ACTUALIZAR ELSE INSERT INTO

O que estou tentando fazer é INSERT assinantes no meu database, mas IF EXISTS ele deve UPDATE a linha, ELSE INSERT INTO uma nova linha.

É claro que eu me conecto primeiro ao database e GET $name , $email e $birthday da string 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']; 

Isso funciona, mas apenas adiciona a nova linha;

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

Aqui está o que eu tentei;

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

Mas nenhum deles funciona, o que estou fazendo errado?

Qualquer ajuda é muito apreciada!

  1. Crie uma restrição UNIQUE na sua coluna subs_email , se ainda não existir uma:

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

Você pode usar a function VALUES (col_name) na cláusula UPDATE para se referir aos valores de coluna da parte INSERT do comando INSERT … ON DUPLICATE KEY UPDATE – dev.mysql.com

  1. Observe que usei espaços reservados de parâmetro no lugar de literais de string, já que um deve estar usando instruções parametrizadas para se defender contra ataques de injeção de SQL .