2010-01-07 53 views
2

這是.php文件的代碼。 「memberid」列具有唯一的索引。當用戶使用現有memberid輸入記錄時,記錄必須更新,否則將創建一個新行。如果ID存在,則更新一行else

我也想顯示一個警告框。出於測試目的,我像下面的方式添加,但它不是射擊。沒有消息顯示。

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

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

您是否意識到這樣的事實:您的代碼對任何一種sql注入都是開放的?我不知道你的「dbaccess」究竟做了什麼,但是你將原始請求數據連接到查詢中的方式會讓我起雞皮疙瘩。也許你應該考慮使用準備好的語句或至少'mysql_real_escape_string'? – shylent 2010-01-07 10:27:58

+0

感謝您的建議。我會相應地改變。 – RKh 2010-01-07 10:58:16

回答

1

查看MySQL REPLACE keyword。它的工作原理與INSERT完全相同,但會根據主鍵覆蓋現有記錄。儘管如此,請仔細閱讀詳細信息,因爲它不完全等同於嘗試INSERT,後跟UPDATE。

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

+0

是否爲所有版本的DUPLICATE支持? – sathish 2010-01-07 10:26:44

+2

我應該注意到,替換和插入重複鍵更新完成了完全不同的事情,我必須向你保證,主要區別在於語法中不是*。 – shylent 2010-01-07 10:31:19

+0

MySQL 4.1及以上版本。 – Thorarin 2010-01-07 10:32:16

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

我通常只是檢查無論從$ _POST或$ _GET陣列的記錄的ID值的存在(根據情況)。如果值存在並且是數字,則嘗試使用相應的ID更新該行;如果不執行INSERT查詢。

相關問題