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