更新父级时,子行消失

时间:2012-09-17 16:43:53

标签: php mysql

我有一个多部分表单,按“后退”或“下一步”将导致该部分被提交并存储到数据库中(MySQL);唯一的区别是它是否转到下一个或上一个形式。

请注意,后续部分(第二部分以后)是第一部分表的子表。他们将'ePARno'作为外键。

第一部分执行此代码段:

if( isset( $_SESSION[ 'eparno' ] ) ) { //if it's an edit, replace
        $eparno = $_SESSION[ 'eparno' ];
        $insert_query_0 = mysql_query ("
            REPLACE INTO form 
                (ePARno, caseno, accomplishedby)
                VALUES 
                ('$eparno', '$caseno', '$accomplishedby')
        ");
}
else { //otherwise, it's a fresh insert
    $insert_query_0 = mysql_query ("
        INSERT INTO form 
            (caseno, accomplishedby)
            VALUES 
        ('$caseno', '$accomplishedby')
    ");
     $eparno = mysql_insert_id();
}

当我回到第二张表格上时,我的问题就出现了,把我带到了第一张表格,然后通过点击接下来回到它。当我这样做时会发生第二种形式的插入行被插入(由于按下Back)但当我从第一种形式按Next时它会从表中消失。 (我通过phpmyadmin同时按下后退和下一步查看数据库)

我怀疑这与替换父行的第一个表单有关。如果它执行REPLACE,我怀疑已经存在的子行(例如第二种形式的子行)将被删除。

我还必须说,如果我不回去,事情就会顺利进行。没有行消失。

我的怀疑是否有任何优点?如果是这样,我该如何解决这个问题?如果没有,那可能是什么问题?

1 个答案:

答案 0 :(得分:1)

REPLACE执行DELETEINSERT。我猜想DELETE正在级联到子表。

请尝试INSERT...ON DUPLICATE KEY

'caseno'是你的主键吗?如果是这样,也许就是这样:

INSERT into form (caseno, accomplishedby) values (?,?)
ON DUPLICATE KEY UPDATE eparno = values(eparno), accomplishedby = values(accomplishedby)