Prova questo:
$SQL = "INSERT INTO wifi (ssid, password, name, surname)
SELECT ?, ?, ?, ? FROM DUAL
WHERE NOT EXISTS (
SELECT *
FROM wifi
WHERE ssid=? AND name=? AND surname=?)";
DUAL
è un nome di tabella fittizia che puoi utilizzare quando non è necessario accedere a una tabella reale. Mettere i segnaposto nel SELECT
principale piuttosto che una sottoquery sembra evitare il problema del segnaposto.
L'altro modo per farlo è creare un indice univoco su quelle colonne:
CREATE UNIQUE INDEX ssid_name_surname ON wifi (ssid, name, surname);
Quindi puoi usare:
$SQL = "INSERT IGNORE INTO wifi (ssid, password, name, surname)
VALUES (?, ?, ?, ?)";
Se vuoi aggiornare la password se esiste già, usa ON DUPLICATE KEY UPDATE
invece di INSERT IGNORE
:
$SQL = "INSERT INTO wifi (ssid, password, name, surname)
VALUES (?, ?, ?, ?)
ON DUPLICATE KEY UPDATE password = VALUES(password)";