Mysql
 sql >> Database >  >> RDS >> Mysql

Dichiarazione preparata con SU CHIAVE DUPLICATA

Il modo più semplice per utilizzare INSERT...ON DUPLICATE KEY UPDATE consiste nell'utilizzare la clausola VALUES nel modo seguente, quindi non è necessario ripetere i parametri nella clausola UPDATE. Usano semplicemente gli stessi valori per ogni colonna che hai passato nella clausola 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();
}

La sintassi IODKU richiede l'impostazione di ciascuna colonna individualmente. Non puoi elencarli tutti in una clausola come stavi cercando di fare.

Dovresti sempre segnalare eventuali errori da qualsiasi chiamata a prepare() o execute(). Oppure puoi fare eccezioni di mysqli:

$mysqli -> report_mode = MYSQLI_REPORT_STRICT;

Inoltre, non è necessario bind_result(), poiché non è presente alcun set di risultati da INSERT:

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