如果ID存在则更新一行,否则插入

时间:2010-01-07 10:15:24

标签: php mysql

这是.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 个答案:

答案 0 :(得分:3)

答案 1 :(得分:1)

请参阅MySQL REPLACE keyword。它的工作方式与INSERT完全相同,但会根据主键覆盖现有记录。请仔细阅读详细信息,因为它并不完全等同于尝试INSERT,然后是UPDATE。

INSERT ... ON DUPLICATE可能是您需要的。想到触发器或外键的情况。然而,语法更长:)

答案 2 :(得分:1)

REPLACE INTO candidate_db_social (memberid, socialactivities, lastupdated) VALUES (".$CandidateID.",'".$SocialProfile."',now())";

答案 3 :(得分:0)

您可以使用INSERT ... ON DUPLICATE KEY UPDATE语法,如:

insert into t values ('a', 'b', 'c') on duplicate key
  update a='a', b='b', c='c'

答案 4 :(得分:0)

使用mysql

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

示例:

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

答案 5 :(得分:0)

我通常只检查$ _POST或$ _GET数组中是否存在记录ID值(具体取决于具体情况)。如果值存在且为数字,则尝试使用相应的ID更新行;如果不执行INSERT查询。