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

Kompleks php mysqli-forespørgsel for at indsætte data, hvis de ikke eksisterer:får duplikat kolonnenavn '?'

Prøv dette:

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

DUAL er et dummy-tabelnavn, som du kan bruge, når du ikke har brug for at få adgang til en egentlig tabel. Sætter pladsholderne i hoved-SELECT snarere end en underforespørgsel ser ud til at undgå pladsholderproblemet.

Den anden måde du kan gøre dette på er ved at oprette et unikt indeks på disse kolonner:

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

Så kan du bruge:

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

Hvis du vil opdatere adgangskoden, hvis den allerede eksisterer, skal du bruge ON DUPLICATE KEY UPDATE i stedet for INSERT IGNORE :

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


  1. Hvordan finder man forskellige kolonner i en indlejret underforespørgsel i SQL?

  2. MySQL Job kunne ikke starte

  3. Brug af skråstreg efter mysql_real_escape_string

  4. Fix Msg 529 "Eksplicit konvertering fra datatype int til xml er ikke tilladt" i SQL Server