sql >> Database >  >> RDS >> Mysql

Complexe php mysqli-query om gegevens in te voegen als deze niet bestaan:dubbele kolomnaam '?'

Probeer dit:

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

DUAL is een dummy-tabelnaam die u kunt gebruiken als u geen echte tabel hoeft te openen. Plaatsaanduidingen in de hoofdmap plaatsen SELECT in plaats van een subquery lijkt het probleem met de tijdelijke aanduiding te vermijden.

De andere manier waarop u dit kunt doen, is door een unieke index op die kolommen te maken:

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

Dan kunt u het volgende gebruiken:

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

Als u het wachtwoord wilt bijwerken als het al bestaat, gebruik dan ON DUPLICATE KEY UPDATE in plaats van INSERT IGNORE :

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


  1. PostgreSQL MAAK TABEL

  2. Expliciete JOINs vs Impliciete joins?

  3. Een if-voorwaarde gebruiken in een SQL Server-insert

  4. Hoe maak je een verwijderde tabel opnieuw aan met Django Migrations?