这是.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>";
}
?>
答案 0 :(得分:3)
您应该使用MySQL ON DUPLICATE KEY子句:
http://dev.mysql.com/doc/refman/5.0/en/insert-on-duplicate.html
另见REPLACE:
答案 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查询。