Mysql
 sql >> Base de Dados >  >> RDS >> Mysql

Consulta php mysqli complexa para inserir dados se não existir:obtendo nome de coluna duplicado '?'


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

DUAL é um nome de tabela fictício que você pode usar quando não precisar acessar uma tabela real. Colocando os espaços reservados no SELECT principal em vez de uma subconsulta parece evitar o problema do espaço reservado.

A outra maneira de fazer isso é criando um índice exclusivo nessas colunas:
CREATE UNIQUE INDEX ssid_name_surname ON wifi (ssid, name, surname);

Então você pode usar:
$SQL = "INSERT IGNORE INTO wifi (ssid, password, name, surname)
        VALUES (?, ?, ?, ?)";

Se você quiser atualizar a senha se ela já existir, use ON DUPLICATE KEY UPDATE em vez de INSERT IGNORE :
$SQL = "INSERT INTO wifi (ssid, password, name, surname)
        VALUES (?, ?, ?, ?)
        ON DUPLICATE KEY UPDATE password = VALUES(password)";