Prøv dette:
$SQL = "INSERT INTO wifi (ssid, password, name, surname)
SELECT ?, ?, ?, ? FROM DUAL
WHERE NOT EXISTS (
SELECT *
FROM wifi
WHERE ssid=? AND name=? AND surname=?)";
DUAL
er et dummy-tabelnavn, som du kan bruge, når du ikke har brug for at få adgang til en egentlig tabel. Sætter pladsholderne i hoved-SELECT
snarere end en underforespørgsel ser ud til at undgå pladsholderproblemet.
Den anden måde du kan gøre dette på er ved at oprette et unikt indeks på disse kolonner:
CREATE UNIQUE INDEX ssid_name_surname ON wifi (ssid, name, surname);
Så kan du bruge:
$SQL = "INSERT IGNORE INTO wifi (ssid, password, name, surname)
VALUES (?, ?, ?, ?)";
Hvis du vil opdatere adgangskoden, hvis den allerede eksisterer, skal du bruge ON DUPLICATE KEY UPDATE
i stedet for INSERT IGNORE
:
$SQL = "INSERT INTO wifi (ssid, password, name, surname)
VALUES (?, ?, ?, ?)
ON DUPLICATE KEY UPDATE password = VALUES(password)";