Mysql
 sql >> Base de données >  >> RDS >> Mysql

Déclaration préparée avec ON DUPLICATE KEY

La manière la plus simple d'utiliser INSERT...ON DUPLICATE KEY UPDATE est d'utiliser la clause VALUES de la manière suivante, vous n'avez donc pas besoin de répéter les paramètres dans la clause UPDATE. Ils utilisent simplement les mêmes valeurs pour chaque colonne que vous avez transmises dans la clause 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 syntaxe IODKU nécessite que vous définissiez chaque colonne individuellement. Vous ne pouvez pas tous les énumérer dans un article comme vous essayiez de le faire.

Vous devez toujours signaler les erreurs de tout appel à prepare() ou execute(). Ou vous pouvez faire en sorte que mysqli lance des exceptions :

$mysqli -> report_mode = MYSQLI_REPORT_STRICT;

De plus, vous n'avez pas besoin de bind_result(), car il n'y a pas de jeu de résultats à partir de INSERT :

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