我有一个问题,而不是检查是否有重复,下面的脚本只是将行插入mysql,根本没有更新。我一次又一次地尝试过,但总会有重复。
我到底错在了什么?
if ($completeStatus == "0") {
// Get the default questions responses and insert into database
$questionsAnswered = $_GET['questions'];
foreach( $questionsAnswered as $key => $answers){
$query = "INSERT INTO survey_ResponseDetail (responseHeader,
questionID,
questionText,
ansLikelihood,
ansExpConsq,
ansRepRisk,
currWayMitigate
)
VALUES ('$ResponseHeader',
'$key',
'test1',
'$answers[1]',
'$answers[2]',
'$answers[3]',
'$answers[4]'
)
ON DUPLICATE KEY UPDATE ansLikelihood = '$answers[1]',
ansExpConsq = '$answers[2]',
ansRepRisk = '$answers[3]',
currWayMitigate = '$answers[4]',
id = LAST_INSERT_ID(id)";
$dbresult = mysql_query($query) or die ('Database Error (' . mysql_errno() . ') ' . mysql_error());
}
答案 0 :(得分:1)
假设您在评论中的断言是正确的,问题是您没有在survey_ResponseDetail
中的任何字段上定义唯一约束或主键。
根据ON DUPLICATE KEY UPDATE
语法
如果指定ON DUPLICATE KEY UPDATE,则插入一行 会导致UNIQUE索引或PRIMARY KEY中的重复值 执行旧行的更新。
如果你没有将某个字段指定为唯一(或通过将其标记为PK来间接地这样做),那么MySQL无法知道重复的密钥是什么。因此,命令没有达到预期的效果。
如果您告诉我survey_ResponseDetail
中每行的哪个字段(或字段组合)必须是唯一的,我将使用代码编辑我的答案,以应用您需要的约束来使其工作。
答案 1 :(得分:0)
要使ON DUPLICATE KEY UPDATE
起作用,其中一个更新/新插入的字段必须是主键,或者应该有一个唯一索引。
它不一定是一个领域。复合键也可以定义为唯一。