Hãy thử điều này:
$SQL = "INSERT INTO wifi (ssid, password, name, surname)
SELECT ?, ?, ?, ? FROM DUAL
WHERE NOT EXISTS (
SELECT *
FROM wifi
WHERE ssid=? AND name=? AND surname=?)";
DUAL là một tên bảng giả mà bạn có thể sử dụng khi không cần truy cập vào một bảng thực tế. Đưa trình giữ chỗ vào SELECT chính thay vì truy vấn con dường như tránh được vấn đề về trình giữ chỗ.
Cách khác mà bạn có thể làm là tạo một chỉ mục duy nhất trên các cột đó:
CREATE UNIQUE INDEX ssid_name_surname ON wifi (ssid, name, surname);
Sau đó, bạn có thể sử dụng:
$SQL = "INSERT IGNORE INTO wifi (ssid, password, name, surname)
VALUES (?, ?, ?, ?)";
Nếu bạn muốn cập nhật mật khẩu nếu nó đã tồn tại, hãy sử dụng ON DUPLICATE KEY UPDATE thay vì INSERT IGNORE :
$SQL = "INSERT INTO wifi (ssid, password, name, surname)
VALUES (?, ?, ?, ?)
ON DUPLICATE KEY UPDATE password = VALUES(password)";