Я думаю, что это должно быть довольно легко, но у меня возникают проблемы с этим. Я немного искал, но был новичком в подготовленных утверждениях. Я не могу понять синтаксис, глядя на другие примеры, которые я нашел здесь и в других местах. В любом случае, вот мой код.
if($stmt = $mysqli -> prepare("INSERT INTO user_info (city, state, website, public_contact, user, zipcode, pic, emailme) VALUES (?, ?, ?, ?, ?, ?, ?,?)
ON DUPLICATE KEY UPDATE (city, state, website, public_contact, user, zipcode, pic, emailme) VALUES (?, ?, ?, ?, ?, ?, ?,?)")) {
$stmt -> bind_param("sssssssi",$city, $state, $website, $public_contact, $user, $zipcode, $pic, $emailme);
$stmt -> execute();
$stmt -> bind_result($result);
$stmt -> close();
}
пользователь является уникальным. Эта ИМО - это просто синтаксическая проблема, поэтому кто-нибудь может помочь мне с правильным синтаксисом? Очень признателен.
ETA: просто для того, чтобы помочь устранить проблему, это работает по назначению, когда я удаляю часть ON DUPLICATE KEY UPDATE, но, очевидно, она разрешает только одну запись для каждого пользователя и не будет обновлять
UPDATE: никогда не мог найти рабочий синтаксис для использования UPDATE ON DUPLICATE KEY UPDATE, поэтому то, что я сделал (по общему мнению, возможно, не самый эффективный способ), проверял таблицу перед рукой для пользователя. Если пользователь существует, я запускаю и UPDATE, если нет, я запускаю INSERT. Ниже мой рабочий код. Надеюсь, это поможет кому-то, кто застрял в моей ситуации.
$sql = "SELECT * FROM user_info WHERE user='$user'";
if ($result=mysqli_query($mysqli,$sql))
{
/* Return the number of rows in result set */
$rows=mysqli_num_rows($result);
/* Free result set */
mysqli_free_result($result);
}
if($rows == 0) {
if($stmt = $mysqli -> prepare("INSERT INTO user_info (city, state, website, public_contact, user, zipcode, pic, emailme) VALUES (?, ?, ?, ?, ?, ?, ?,?) ")) {
$stmt -> bind_param("sssssssi",$city, $state, $website, $public_contact, $user, $zipcode, $pic, $emailme);
$stmt -> execute();
$stmt -> bind_result($result);
$stmt -> close();
}
} else {
if($stmt = $mysqli -> prepare("UPDATE user_info SET city=?, state=?, website=?, public_contact=?, zipcode=?, pic=?, emailme=? WHERE user='$user'")) {
$stmt -> bind_param("ssssssi",$city, $state, $website, $public_contact, $zipcode, $pic, $emailme);
$stmt -> execute();
$stmt -> bind_result($result);
$stmt -> close();
}
}