尝试这个:
$SQL = "INSERT INTO wifi (ssid, password, name, surname)
SELECT ?, ?, ?, ? FROM DUAL
WHERE NOT EXISTS (
SELECT *
FROM wifi
WHERE ssid=? AND name=? AND surname=?)";
DUAL
是一个虚拟表名称,当您不需要访问实际表时可以使用它。将占位符放在 main 中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)";