PHP MySQL — ВСТАВЛЯТЬ И ОБНОВЛЯТЬ ОБНОВЛЯЮЩУЮ КЛЮЧУ с WHERE?

Я хочу, чтобы участники могли добавить больше информации (местоположение, история) в свой профиль, а также обновить свой пароль, если это необходимо.

Для этого я использую следующий фрагмент:

$query = mysql_query("INSERT INTO
members (location, story)
VALUES
('$location', '$story')
WHERE
username='$user'
ON DUPLICATE KEY UPDATE
hash = '$password',
location='$location',
story='$story'
");

Это не работает с частью «ГДЕ», но если я удаляю ее, тогда данные просто заполняются пустой записью, а не записью пользователя. Как правильно использовать часть WHERE в этом фрагменте, чтобы обновлялся правильный профиль пользователя?

Я искал вверх и вниз по Интернету и этому веб-сайту, но не нашел ни одного решения, которое удивляет меня, так как это кажется очень распространенным вопросом?

кто-нибудь знает, как решить эту проблему?

Заранее спасибо!

2

Решение

Первый, mysql устарела, вы должны использовать mysqli,

Во-вторых, убедитесь, что вы избегаете значений, прежде чем вводить их в запросах. mysql_real_escape_string () это минимум

В третьих, INSERT / ON DUPLICATE KEY UPDATE не принимает WHERE пункт.
Это используется для избежания дублирования ключей.
Для простой регистрации пользователя или чего бы то ни было, вы можете избежать использования идентификаторов / автоматического увеличения и использовать username в качестве первичного ключа. Но для этого вам понадобится MyISAM или MySQL 5.6+ для полнотекстовой индексации, и в целом это рекомендуется.

Но в этом случае ваше местоположение и история всегда будут перезаписаны.
Если это то, что вы хотите, вы можете попробовать все, что я написал в предыдущем абзаце.

1

Другие решения

Вы можете использовать INSERT INTO ... SELECT FROM ... ON DUPLICATE KEY UPDATE построить как

INSERT INTO
members (location, story)
SELECT '$location', '$story'
FROM table_name
WHERE username='$user'
ON DUPLICATE KEY UPDATE
hash = '$password',
location='$location',
story='$story'
0

Хорошо, я наконец-то смог решить эту проблему самостоятельно. Для тех, кто заинтересован, вот код:

// if user entered location
if (!empty($_POST['location']))
{
// if database row empty
if ($row['location'] == " ")
{
mysql_query("INSERT INTO members (location) VALUES ('".$location."') WHERE username='".$user."'");
}
// if database row not empty
else
{
mysql_query("UPDATE members SET location='".$location."' WHERE username='".$user."'");
}
}
// if user entered story
if (!empty($_POST['story']))
{
// if database row empty
if ($row['story'] == " ")
{
mysql_query("INSERT INTO members (story) VALUES ('".$story."') WHERE username='".$user."'");
}
// if database row not empty
else
{
mysql_query("UPDATE members SET story='".$story."' WHERE username='".$user."'");
}
}
0
По вопросам рекламы [email protected]