Essayez ceci :
$SQL = "INSERT INTO wifi (ssid, password, name, surname)
SELECT ?, ?, ?, ? FROM DUAL
WHERE NOT EXISTS (
SELECT *
FROM wifi
WHERE ssid=? AND name=? AND surname=?)";
DUAL
est un nom de table factice que vous pouvez utiliser lorsque vous n'avez pas besoin d'accéder à une table réelle. Mettre les espaces réservés dans le SELECT
principal plutôt qu'une sous-requête semble éviter le problème d'espace réservé.
L'autre façon de procéder consiste à créer un index unique sur ces colonnes :
CREATE UNIQUE INDEX ssid_name_surname ON wifi (ssid, name, surname);
Ensuite, vous pouvez utiliser :
$SQL = "INSERT IGNORE INTO wifi (ssid, password, name, surname)
VALUES (?, ?, ?, ?)";
Si vous souhaitez mettre à jour le mot de passe s'il existe déjà, utilisez ON DUPLICATE KEY UPDATE
au lieu de INSERT IGNORE
:
$SQL = "INSERT INTO wifi (ssid, password, name, surname)
VALUES (?, ?, ?, ?)
ON DUPLICATE KEY UPDATE password = VALUES(password)";