update una tabla sintaxis sentencia registro modificar into insertar existe ejemplos ejemplo datos comando actualizar mysql sql insert exists

mysql - una - sentencia update sql



SQL-SI EXISTE UPDATE MÁS INSERTAR EN (1)

Lo que trato de hacer es INSERT suscriptores en mi base de datos, pero IF EXISTS , debería UPDATE la fila, ELSE INSERT INTO nueva fila.

Por supuesto, me conecto primero a la base de datos y GET el $name , $email y $birthday de la cadena 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''];

Esto funciona, pero solo agrega la nueva fila;

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

Esto es lo que intenté;

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

y

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

y

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

Pero ninguno de ellos funciona, ¿qué estoy haciendo mal?

¡Cualquier ayuda es muy apreciada!


  1. Cree una restricción UNIQUE en su columna subs_email , si aún no existe una:

    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)

Puede usar la función VALUES (col_name) en la cláusula UPDATE para referirse a los valores de columna de la parte INSERT de INSERT ... ON DUPLICATE KEY UPDATE - dev.mysql.com

  1. Tenga en cuenta que he utilizado marcadores de posición de parámetros en el lugar de los literales de cadena, ya que uno realmente debería usar sentencias parametrizadas para defenderse contra los ataques de inyección SQL .