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!
Cree una restricción
UNIQUEen su columnasubs_email, si aún no existe una:ALTER TABLE subs ADD UNIQUE (subs_email)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
- 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 .