簡體   English   中英

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

[英]Update a row if ID exists else Insert

這是一個.php文件的代碼。 列“ memberid”具有唯一索引。 當用戶輸入具有現有成員ID的記錄時,該記錄必須得到更新,否則將創建新行。

我也想顯示一個警報框。 出於測試目的,我以如下方式添加,但未觸發。 沒有消息顯示。

我還想知道是否是自動處理插入/更新的正確方法?

<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>";
    }
?>

參見MySQL REPLACE關鍵字 它的工作原理與INSERT完全相同,但是會基於主鍵覆蓋現有記錄。 請仔細閱讀詳細信息,因為它並不完全等同於嘗試INSERT,然后進行UPDATE。

INSERT ... ON DUPLICATE可能正是您需要的。 想到帶有觸發器或外鍵的情況。 但是語法更長:)

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

您可以使用INSERT ... ON DUPLICATE KEY UPDATE語法,如下所示:

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

使用mysql

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

例如:

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

我通常只檢查$ _POST或$ _GET數組中是否存在記錄ID值(取決於情況)。 如果值存在並且是數字,請嘗試使用相應的ID更新該行;否則,請執行以下操作。 如果不執行INSERT查詢。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM