Mysql
 sql >> Database >  >> RDS >> Mysql

Query complessa php mysqli per inserire dati se non esistono:ottenere il nome della colonna duplicata '?'

Prova questo:

$SQL = "INSERT INTO wifi (ssid, password, name, surname) 
        SELECT ?, ?, ?, ? FROM DUAL 
        WHERE NOT EXISTS (
            SELECT *
            FROM wifi 
            WHERE ssid=? AND name=? AND surname=?)";

DUAL è un nome di tabella fittizia che puoi utilizzare quando non è necessario accedere a una tabella reale. Mettere i segnaposto nel SELECT principale piuttosto che una sottoquery sembra evitare il problema del segnaposto.

L'altro modo per farlo è creare un indice univoco su quelle colonne:

CREATE UNIQUE INDEX ssid_name_surname ON wifi (ssid, name, surname);

Quindi puoi usare:

$SQL = "INSERT IGNORE INTO wifi (ssid, password, name, surname)
        VALUES (?, ?, ?, ?)";

Se vuoi aggiornare la password se esiste già, usa ON DUPLICATE KEY UPDATE invece di INSERT IGNORE :

$SQL = "INSERT INTO wifi (ssid, password, name, surname)
        VALUES (?, ?, ?, ?)
        ON DUPLICATE KEY UPDATE password = VALUES(password)";