これを試してください:
$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)";