Cara termudah untuk menggunakan INSERT...ON DUPLICATE KEY UPDATE adalah dengan menggunakan klausa VALUES dengan cara berikut, jadi Anda tidak perlu mengulang parameter dalam klausa UPDATE. Mereka hanya menggunakan nilai yang sama untuk setiap kolom yang Anda teruskan di klausa 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();
}
Sintaks IODKU mengharuskan Anda mengatur setiap kolom satu per satu. Anda tidak dapat mencantumkan semuanya dalam satu klausa seperti yang Anda coba lakukan.
Anda harus selalu melaporkan kesalahan apa pun dari panggilan apa pun ke prepare() atau execute(). Atau Anda dapat membuat pengecualian melempar mysqli:
$mysqli -> report_mode = MYSQLI_REPORT_STRICT;
Selain itu, Anda tidak perlu bind_result(), karena tidak ada hasil yang ditetapkan dari INSERT:
// NO: $stmt -> bind_result($result);