Cách dễ nhất để sử dụng INSERT ... ON DUPLICATE KEY UPDATE là sử dụng mệnh đề VALUES theo cách sau, vì vậy bạn không cần lặp lại các tham số trong mệnh đề CẬP NHẬT. Họ chỉ sử dụng các giá trị giống nhau cho mỗi cột mà bạn đã chuyển trong mệnh đề 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();
}
Cú pháp IODKU yêu cầu bạn đặt từng cột riêng lẻ. Bạn không thể liệt kê tất cả chúng trong một mệnh đề như bạn đang cố gắng làm.
Bạn phải luôn báo cáo bất kỳ lỗi nào từ bất kỳ lệnh gọi nào để chuẩn bị () hoặc thực thi (). Hoặc bạn có thể đặt ngoại lệ ném mysqli:
$mysqli -> report_mode = MYSQLI_REPORT_STRICT;
Ngoài ra, bạn không cần bind_result (), vì không có kết quả nào được đặt từ INSERT:
// NO: $stmt -> bind_result($result);