sql >> Databáze >  >> RDS >> Mysql

Složitý dotaz php mysqli pro vložení dat, pokud neexistují:získávání duplicitního názvu sloupce '?'

Zkuste toto:

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

DUAL je fiktivní název tabulky, který můžete použít, když nepotřebujete přistupovat ke skutečné tabulce. Umístění zástupných symbolů do hlavního SELECT spíše než poddotaz se zdá, že se vyhnete problému se zástupným symbolem.

Druhým způsobem, jak to udělat, je vytvoření jedinečného indexu pro tyto sloupce:

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

Pak můžete použít:

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

Pokud chcete aktualizovat heslo, pokud již existuje, použijte ON DUPLICATE KEY UPDATE místo INSERT IGNORE :

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


  1. Provozní zprávy pro MySQL, MariaDB, PostgreSQL a MongoDB

  2. Koncepty Oracle High Availability v PostgreSQL

  3. Uložte výstup z funkce SQL do souboru csv (COPY) s dynamickým názvem souboru

  4. Automatické zvýšení ID se sequelizací v MySQL