2010-01-07 47 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查询。

相关问题