0

我有一个问题,不是检查是否有重复,而是下面的脚本只是将行插入到 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());

}
4

2 回答 2

1

假设您在评论中的断言是正确的,那么问题是您没有在survey_ResponseDetail.

根据关于ON DUPLICATE KEY UPDATE语法的 MySQL 文档

如果您指定 ON DUPLICATE KEY UPDATE,并且插入的行会导致 UNIQUE 索引或 PRIMARY KEY 中出现重复值,则会执行旧行的 UPDATE。

如果您没有将字段指定为唯一的(或通过将其标记为 PK 来间接这样做),那么 MySQL 无法知道重复键是什么。因此,该命令没有按照您的预期执行。

如果您告诉我哪个字段(或字段组合)对于中的每一行必须是唯一的,survey_ResponseDetail我将使用代码编辑我的答案以应用您需要进行此工作的约束。

于 2012-06-19T03:55:00.963 回答
0

为了ON DUPLICATE KEY UPDATE工作,更新/新插入的字段之一必须是主键或者应该有一个唯一的索引。

它不必是单个字段。复合键也可以定义为唯一的。

于 2012-06-19T03:54:05.067 回答