Mysql
 sql >> Datenbank >  >> RDS >> Mysql

Komplexe PHP-Mysqli-Abfrage zum Einfügen von Daten, falls nicht vorhanden:doppelter Spaltenname '?'

Versuchen Sie Folgendes:

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

DUAL ist ein Dummy-Tabellenname, den Sie verwenden können, wenn Sie nicht auf eine tatsächliche Tabelle zugreifen müssen. Setzen der Platzhalter in das Haupt-SELECT statt einer Unterabfrage scheint das Platzhalterproblem zu vermeiden.

Sie können dies auch tun, indem Sie einen eindeutigen Index für diese Spalten erstellen:

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

Dann können Sie verwenden:

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

Wenn Sie das Passwort aktualisieren möchten, falls es bereits vorhanden ist, verwenden Sie ON DUPLICATE KEY UPDATE statt INSERT IGNORE :

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