Опитайте това:
$SQL = "INSERT INTO wifi (ssid, password, name, surname)
SELECT ?, ?, ?, ? FROM DUAL
WHERE NOT EXISTS (
SELECT *
FROM wifi
WHERE ssid=? AND name=? AND surname=?)";
DUAL
е фиктивно име на таблица, което можете да използвате, когато нямате нужда от достъп до действителна таблица. Поставяне на заместителите в главния SELECT
вместо подзаявка изглежда избягва проблема с заместителя.
Другият начин, по който можете да направите това, е като създадете уникален индекс за тези колони:
CREATE UNIQUE INDEX ssid_name_surname ON wifi (ssid, name, surname);
След това можете да използвате:
$SQL = "INSERT IGNORE INTO wifi (ssid, password, name, surname)
VALUES (?, ?, ?, ?)";
Ако искате да актуализирате паролата, ако тя вече съществува, използвайте ON DUPLICATE KEY UPDATE
вместо INSERT IGNORE
:
$SQL = "INSERT INTO wifi (ssid, password, name, surname)
VALUES (?, ?, ?, ?)
ON DUPLICATE KEY UPDATE password = VALUES(password)";