Soy muy nuevo en SQL y PHP, pero quiero agregar un usuario a una lista si aún no existe una entrada con su ip. Si la entrada existe, solo quiero actualizar su nombre de usuario.

Puedo realizar ambas operaciones fuera de la declaración "si existe" sin contratiempos, pero obviamente crea muchos duplicados. Cuando lo envuelvo en la instrucción "si existe", la consulta deja de hacer nada.

Sé que hay algunas preguntas sobre el tema, pero he intentado seguir la mayoría de los consejos, si hay otra forma de hacerlo, me complacería considerarlo, gracias.

<?php
$username = strval($_GET['username']);
$userip = $_SERVER['REMOTE_ADDR'];

$con = mysqli_connect("localhost", "ramendev_jctwood", "M1n1flam3", "ramendev_jctwood") or die ("Failed to connect to MySQL: " . mysqli_connect_error());

mysqli_query($con, "IF EXISTS (SELECT 1 FROM Users WHERE Userip='$userip')
                        UPDATE Users SET User='$username' WHERE Userip='$userip'
                    ELSE
                        INSERT INTO Users (User, Userip) VALUES ('$username', '$userip')
                            ");
?>
2
jctwood 29 ago. 2014 a las 20:17

3 respuestas

Puedes probar esto:

IF (SELECT COUNT(*) FROM Users WHERE Userip='$userip') > 0
    UPDATE Users SET User='$username' WHERE Userip='$userip'
ELSE
    INSERT INTO Users (User, Userip) VALUES ('$username', '$userip')
2
Yanire Romero 29 ago. 2014 a las 16:23

Probar este

$query = "SELECT * FROM Users WHERE Userip='$userip'";
$check = mysql_query($query);
if(mysql_num_rows($check)) {
   $existdata = mysql_fetch_array($check);
   $newquery = "UPDATE Users SET User='$username' WHERE Userip='{$existdata['Userip']}'";
} else {
   $newquery = "INSERT INTO Users (User, Userip) VALUES ('$username', '$userip')";       
}
$execute = mysql_query($new_query);
if($execute){
   echo "Success";
} else {
   echo mysql_error();
}
0
user3349436 29 ago. 2014 a las 16:26

Esto es lo que el documento nos dice para el caso cuando tiene la clave primaria http://dev.mysql.com/doc/refman/5.5/en/insert-on-duplicate.html:

INSERT INTO table (a,b,c) VALUES (1,2,3)
  ON DUPLICATE KEY UPDATE c=c+1;
0
Bulat 29 ago. 2014 a las 16:59