これを試してください:
$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にプレースホルダーを配置する サブクエリではなく、プレースホルダーの問題を回避するようです。
これを行うもう1つの方法は、これらの列に一意のインデックスを作成することです。
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)";