Mysql
 sql >> Base de données >  >> RDS >> Mysql

Requête php mysqli complexe pour insérer des données si elles n'existent pas :obtenir le nom de colonne en double '?'

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