Spróbuj tego:
$SQL = "INSERT INTO wifi (ssid, password, name, surname)
SELECT ?, ?, ?, ? FROM DUAL
WHERE NOT EXISTS (
SELECT *
FROM wifi
WHERE ssid=? AND name=? AND surname=?)";
DUAL
to fikcyjna nazwa tabeli, której możesz użyć, gdy nie potrzebujesz dostępu do rzeczywistej tabeli. Umieszczanie symboli zastępczych w głównym SELECT
zamiast podzapytania wydaje się, że unika się problemu z symbolami zastępczymi.
Innym sposobem, aby to zrobić, jest utworzenie unikalnego indeksu dla tych kolumn:
CREATE UNIQUE INDEX ssid_name_surname ON wifi (ssid, name, surname);
Następnie możesz użyć:
$SQL = "INSERT IGNORE INTO wifi (ssid, password, name, surname)
VALUES (?, ?, ?, ?)";
Jeśli chcesz zaktualizować hasło, jeśli już istnieje, użyj ON DUPLICATE KEY UPDATE
zamiast INSERT IGNORE
:
$SQL = "INSERT INTO wifi (ssid, password, name, surname)
VALUES (?, ?, ?, ?)
ON DUPLICATE KEY UPDATE password = VALUES(password)";