sql вставить и обновить вопрос - PullRequest
1 голос
/ 09 апреля 2009

У меня есть форма для вставки данных в базу данных. Эта форма принимает содержимое полей, а затем отображает страницу результатов, отображающую введенную информацию в контексте. На этой странице есть ссылка для редактирования информации о пользователе, которая возвращает вас к предыдущей форме. Очевидно, я не хочу вставлять дубликаты записей. Есть ли простой способ использовать оператор обновления, если запись уже существует? Я делаю это с ajax и php.

Ответы [ 4 ]

5 голосов
/ 09 апреля 2009

Взгляните на:

INSERT ... ON DUPLICATE позволит вам выполнить запрос ОБНОВЛЕНИЕ, когда сопоставляется УНИКАЛЬНЫЙ ИНДЕКС или ПЕРВИЧНЫЙ КЛЮЧ.

REPLACE работает точно так же, но если строка найдена, старая строка удаляется перед вставкой новой. При использовании каскадного удаления это особенно важно учитывать!

2 голосов
/ 09 апреля 2009

MySQL поддерживает добавление ON DUPLICATE KEY UPDATE в инструкцию INSERT, которая должна делать то, что вы хотите.

1 голос
/ 09 апреля 2009

Предполагая, что у вас есть поле типа 'username' или 'email', вы можете использовать это поле, чтобы проверить, существует ли запись, если она существует, обновить ее.

$res = mysql_query("SELECT primary_key FROM my_table WHERE `email` = '" . mysql_real_escape_string($email) . "'");

if($row = mysql_fetch_array($res))
{
    // Record exists, update it
    $q = "UPDATE my_table SET `username` = '" . mysql_real_escap_string($username) . "' WHERE primary_key = " . (int) $row['primary_key'];
}
else
{
    // Record doesn't exist, insert
    $q = "INSERT INTO my_table(username, email) VALUES('" . mysql_real_escape_string($username) . "', '" . mysql_real_escape_string($email) . "');";
}

В приведенном выше примере я предполагаю, что у вас есть поле первичного ключа, которое является целым числом (primary_key).

0 голосов
/ 09 апреля 2009

Вы должны рассмотреть вопрос об использовании ORM, как http://www.ezpdo.net/blog/?p=2 Простой SQL в веб-приложениях следует использовать только в случае крайней необходимости, отдельно по соображениям безопасности, но и во избежание подобных проблем.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...