Обновить строку, если идентификатор существует, иначе Вставить - PullRequest
2 голосов
/ 07 января 2010

Это код файла .php. Столбец "memberid" имеет уникальный индекс. Когда пользователь вводит запись с существующим memberid, запись должна обновляться, иначе создается новая строка.

Я также хочу показать окно предупреждения. Для целей тестирования я добавил, как описано ниже, но это не стрельба. Сообщение не отображается.

Я также хочу знать, является ли правильным подход автоматически обрабатывать вставку / обновление?

<META http-equiv="refresh" content="2; URL=socialprofile.html">
<?php
error_reporting(E_ALL ^ E_NOTICE);
require_once("../Lib/dbaccess.php");

    //Retrieve values from Input Form
    $CandidateID = $_POST["inCandidate"];
    $SocialProfile = $_POST["inActivities"];

    $InsertQuery = "INSERT INTO candidate_db_social (memberid, socialactivities, lastupdated) VALUES (".$CandidateID.",'".$SocialProfile."',now())";
    $UpdateQuery = "UPDATE candidate_db_social SET socialactivities='".$SocialProfile."', lastupdated=now() WHERE memberid=".$CandidateID;
    try
    {
        $Result = dbaccess::InsertRecord($InsertQuery); 
    }
    catch(exception $ex)
    {
        $Result = dbaccess::InsertRecord($UpdateQuery);
        echo "<script type='text/javascript'>alert('".$ex."');</script>";
    }
?>

Ответы [ 6 ]

3 голосов
/ 07 января 2010

Вы должны использовать условие MySQL ON DUPLICATE KEY:

http://dev.mysql.com/doc/refman/5.0/en/insert-on-duplicate.html

Также см. ЗАМЕНА:

http://dev.mysql.com/doc/refman/5.0/en/replace.html

1 голос
/ 07 января 2010
REPLACE INTO candidate_db_social (memberid, socialactivities, lastupdated) VALUES (".$CandidateID.",'".$SocialProfile."',now())";
1 голос
/ 07 января 2010

См. Ключевое слово MySQL REPLACE .Он работает точно так же, как INSERT, но перезаписывает существующие записи на основе первичного ключа.Читайте подробности, потому что это не совсем то же самое, что попытка ВСТАВКИ, за которой следует ОБНОВЛЕНИЕ.

ВСТАВИТЬ ... ВКЛ. ДУБЛИКАТ может быть тем, что вам нужно.Вспоминаются ситуации с триггерами или внешними ключами.Однако более длинный синтаксис:)

0 голосов
/ 07 января 2010

Обычно я просто проверяю наличие идентификатора записи в массиве $ _POST или $ _GET (в зависимости от ситуации). Если значение существует и является числовым, попытайтесь ОБНОВИТЬ строку с соответствующим идентификатором; если не выполнить запрос INSERT.

0 голосов
/ 07 января 2010

используйте mysql

INSERT INTO table VALUES() 
                       ON duplicate KEY UPDATE ..; 

пример:

http://www.mysqlperformanceblog.com/2006/05/29/insert-on-duplicate-key-update-and-summary-counters/

0 голосов
/ 07 января 2010

Вы можете использовать синтаксис INSERT ... ON DUPLICATE UPDATE , например:

insert into t values ('a', 'b', 'c') on duplicate key
  update a='a', b='b', c='c'
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...