sql >> データベース >  >> RDS >> Mysql

存在しない場合にデータを挿入するための複雑なphpmysqliクエリ:重複する列名'?'を取得します

    これを試してください:

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

    DUAL は、実際のテーブルにアクセスする必要がない場合に使用できるダミーのテーブル名です。メインのSELECTにプレースホルダーを配置する サブクエリではなく、プレースホルダーの問題を回避するようです。

    これを行うもう1つの方法は、これらの列に一意のインデックスを作成することです。

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

    次に、次を使用できます:

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

    パスワードがすでに存在する場合に更新する場合は、ON DUPLICATE KEY UPDATEを使用します。 INSERT IGNOREの代わりに :

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


    1. Postgresを開始できません

    2. 複数の値に一致するレコードのグループを検索します

    3. MySQL:行レベルのセキュリティ(Oracleの仮想プライベートデータベースなど)を実行するにはどうすればよいですか?

    4. レール内の列タイプをより長い文字列に変更する