INSERT ... ON DUPLICATE KEY UPDATEを使用する最も簡単な方法は、次のようにVALUES句を使用することです。したがって、UPDATE句のパラメータを繰り返す必要はありません。 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();
}
IODKU構文では、各列を個別に設定する必要があります。あなたがやろうとしていたように、それらすべてを1つの句にリストすることはできません。
prepare()またはexecute()の呼び出しからのエラーは、常に報告する必要があります。または、mysqliに例外をスローさせることができます:
$mysqli -> report_mode = MYSQLI_REPORT_STRICT;
また、INSERT:
からの結果セットがないため、bind_result()を実行する必要はありません。// NO: $stmt -> bind_result($result);