sql >> Base de Datos >  >> RDS >> Mysql

Consulta compleja de php mysqli para insertar datos si no existen:obtener el nombre de columna duplicado '?'

Prueba esto:

$SQL = "INSERT INTO wifi (ssid, password, name, surname) 
        SELECT ?, ?, ?, ? FROM DUAL 
        WHERE NOT EXISTS (
            SELECT *
            FROM wifi 
            WHERE ssid=? AND name=? AND surname=?)";

DUAL es un nombre de tabla ficticio que puede usar cuando no necesita acceder a una tabla real. Poner los marcadores de posición en el SELECT principal en lugar de una subconsulta parece evitar el problema del marcador de posición.

La otra forma de hacerlo es creando un índice único en esas columnas:

CREATE UNIQUE INDEX ssid_name_surname ON wifi (ssid, name, surname);

Entonces puedes usar:

$SQL = "INSERT IGNORE INTO wifi (ssid, password, name, surname)
        VALUES (?, ?, ?, ?)";

Si desea actualizar la contraseña si ya existe, utilice ON DUPLICATE KEY UPDATE en lugar de INSERT IGNORE :

$SQL = "INSERT INTO wifi (ssid, password, name, surname)
        VALUES (?, ?, ?, ?)
        ON DUPLICATE KEY UPDATE password = VALUES(password)";