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

Připravený výpis s ON DUPLICATE KEY

Nejjednodušší způsob, jak použít INSERT...ON DUPLICATE KEY UPDATE, je použít klauzuli VALUES následujícím způsobem, takže nemusíte opakovat parametry v klauzuli UPDATE. Pouze používají stejné hodnoty pro každý sloupec, který jste předali v klauzuli VALUES:

if($stmt = $mysqli -> prepare("
    INSERT INTO user_info (city, state, website, public_contact, 
        user, zipcode, pic, emailme)
    VALUES (?, ?, ?, ?, ?, ?, ?, ?) 
    ON DUPLICATE KEY UPDATE
        city = VALUES(city),
        state = VALUES(state),
        website = VALUES(website),
        public_contact = VALUES(public_contact),
        user = VALUES(user),
        zipcode = VALUES(zipcode),
        pic = VALUES(pic),
        emailme = VALUES(emailme)") {
    $stmt -> bind_param("sssssssi",$city, $state, $website, $public_contact, 
        $user, $zipcode, $pic, $emailme);
    $stmt -> execute();
    $stmt -> close();
}

Syntaxe IODKU vyžaduje, abyste každý sloupec nastavili samostatně. Nemůžete je všechny vyjmenovat v jedné klauzuli, jak jste se to snažili udělat.

Vždy byste měli hlásit jakékoli chyby z jakéhokoli volání Prepare() nebo execute(). Nebo můžete přimět mysqli, aby vyvolávalo výjimky:

$mysqli -> report_mode = MYSQLI_REPORT_STRICT;

Také nemusíte bind_result(), protože neexistuje žádná sada výsledků z INSERT:

// NO: $stmt -> bind_result($result);


  1. Jak mohu použít spouštěče PostgreSQL k ukládání změn (příkazy SQL a změny řádků)

  2. Laravel:Jak uložit data formátu json do databáze?

  3. Různé způsoby zobrazení tabulek na serveru MySQL

  4. Proč nemohou indexovaná zobrazení mít agregaci MAX()?