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)";