sql >> Databasteknik >  >> RDS >> Mysql

Komplex php mysqli-fråga för att infoga data om den inte finns:får Duplicate kolumnnamnet '?'

Prova detta:

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

DUAL är ett dummy-tabellnamn som du kan använda när du inte behöver komma åt en faktisk tabell. Placera platshållarna i huvud SELECT snarare än en underfråga verkar undvika platshållarproblemet.

Det andra sättet du kan göra detta på är genom att skapa ett unikt index på dessa kolumner:

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

Då kan du använda:

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

Om du vill uppdatera lösenordet om det redan finns, använd ON DUPLICATE KEY UPDATE istället för INSERT IGNORE :

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


  1. mysql-processen kan inte stoppas

  2. Beställ flera kolumner ASC

  3. flera tillagda entiteter kan ha samma primärnyckel på databasfrö

  4. Ta bort från en tabell med join