sql >> Databasteknik >  >> RDS >> Mysql

Förberedt uttalande med PÅ DUBLIKATNYCKEL

Det enklaste sättet att använda INSERT...ON DUPLICATE KEY UPDATE är att använda VALUES-satsen på följande sätt, så du behöver inte upprepa parametrarna i UPDATE-satsen. De använder bara samma värden för varje kolumn som du skickade i VALUES-satsen:

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();
}

IODKU-syntaxen kräver att du ställer in varje kolumn individuellt. Du kan inte lista dem alla i en klausul som du försökte göra.

Du bör alltid rapportera eventuella fel från alla anrop till prepare() eller execute(). Eller så kan du få mysqli att kasta undantag:

$mysqli -> report_mode = MYSQLI_REPORT_STRICT;

Du behöver inte heller binda_result(), eftersom det inte finns någon resultatuppsättning från INSERT:

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


  1. 6 problemfrågor som kraftigt saktar ner din databas

  2. Från lagrad procedur, returnera OUT-parameter &OUT-markör &analysresultat (Oracle)

  3. Fallbeskrivning i MySQL

  4. Få en exakt exekveringstid för en MySQL-sats