De eenvoudigste manier om INSERT...ON DUPLICATE KEY UPDATE te gebruiken, is door de VALUES-component op de volgende manier te gebruiken, zodat u de parameters in de UPDATE-component niet hoeft te herhalen. Ze gebruiken gewoon dezelfde waarden voor elke kolom die je hebt doorgegeven in de VALUES-component:
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();
}
De IODKU-syntaxis vereist dat u elke kolom afzonderlijk instelt. Je kunt ze niet allemaal in één clausule opsommen zoals je probeerde te doen.
U moet altijd eventuele fouten rapporteren van elke aanroep naar prepare() of execute(). Of u kunt mysqli-uitzonderingen maken:
$mysqli -> report_mode = MYSQLI_REPORT_STRICT;
U hoeft ook niet bind_result() te gebruiken, aangezien er geen resultaat is ingesteld voor INSERT:
// NO: $stmt -> bind_result($result);