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
UNIQUE
en 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 .