Prova detta:
$SQL = "INSERT INTO wifi (ssid, password, name, surname)
SELECT ?, ?, ?, ? FROM DUAL
WHERE NOT EXISTS (
SELECT *
FROM wifi
WHERE ssid=? AND name=? AND surname=?)";
DUAL
är ett dummy-tabellnamn som du kan använda när du inte behöver komma åt en faktisk tabell. Placera platshållarna i huvud SELECT
snarare än en underfråga verkar undvika platshållarproblemet.
Det andra sättet du kan göra detta på är genom att skapa ett unikt index på dessa kolumner:
CREATE UNIQUE INDEX ssid_name_surname ON wifi (ssid, name, surname);
Då kan du använda:
$SQL = "INSERT IGNORE INTO wifi (ssid, password, name, surname)
VALUES (?, ?, ?, ?)";
Om du vill uppdatera lösenordet om det redan finns, använd ON DUPLICATE KEY UPDATE
istället för INSERT IGNORE
:
$SQL = "INSERT INTO wifi (ssid, password, name, surname)
VALUES (?, ?, ?, ?)
ON DUPLICATE KEY UPDATE password = VALUES(password)";