更新新记录时,以前更新的记录会恢复 MySQL PHP

Posted

技术标签:

【中文标题】更新新记录时,以前更新的记录会恢复 MySQL PHP【英文标题】:Previous updated record reverts when updating a new record MySQL PHP 【发布时间】:2011-12-09 22:51:51 【问题描述】:

祝大家有美好的一天。我正在尝试为我的系统制作一个任务跟踪模块。逻辑是,每当我将任务分配给用户时,系统都会将任务更新为“IsTaken”,这意味着特定用户负责该任务。更新后,它会在“user_task”表中创建一个条目,该表基本上将任务和用户表联系在一起。每当我将任务分配给某人时,这都很好。但是当我再次执行此操作时,之前的任务记录的 IsTaken 字段恢复为 0。我尝试重新分配它,但同样,之前的记录恢复了。这很奇怪。我正在使用 XAMPP、mysqlphp。我希望我不是唯一遇到这种情况的人。任何帮助将非常感激。

这是我的桌子:

CREATE TABLE IF NOT EXISTS `task` (
  `Task_No` int(11) NOT NULL AUTO_INCREMENT,
  `Task_Name` varchar(100) NOT NULL,
  `Task_Desc` varchar(450) DEFAULT NULL,
  `Task_DateCreated` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP,
  `Task_IsTaken` tinyint(1) NOT NULL,
  PRIMARY KEY (`Task_No`)
) ENGINE=InnoDB  DEFAULT CHARSET=latin1 AUTO_INCREMENT=3 ;

CREATE TABLE IF NOT EXISTS `user_task` (
  `UT_No` int(11) NOT NULL AUTO_INCREMENT,
  `User_Email` varchar(100) NOT NULL,
  `Task_No` int(11) NOT NULL,
  `Task_Duration` varchar(20) NOT NULL,
  `Task_DateTaken` date DEFAULT NULL,
  `Task_DateFinished` timestamp NULL DEFAULT NULL,
  `Task_IsIssue` tinyint(1) NOT NULL,
  PRIMARY KEY (`UT_No`)
) ENGINE=InnoDB  DEFAULT CHARSET=latin1 AUTO_INCREMENT=3 ;

这是我的脚本(来自表单):

//Process - Insert Task
if(isset($_POST['btnCreateTask']))

if($_POST['taskName']!=NULL)

$taskName = mysql_real_escape_string ($_POST['taskName']);
$taskDesc = mysql_real_escape_string ($_POST['taskDesc']);
$insertTask = "INSERT INTO task(Task_Name, Task_Desc, Task_IsTaken) VALUES('$taskName', '$taskDesc', 0)";
$sqlResult1 = mysql_query($insertTask);
else

    echo "No task name given";
    $errorCode = 1;




if(isset($_POST['btnAssignTask']))

    if($_POST['assignTaskName']!=NULL)

    $assigntaskName = mysql_real_escape_string($_POST['assignTaskName']);
    $assigntaskNo = mysql_real_escape_string($_POST['assignTaskNo']);
    $assigntaskOwner = mysql_real_escape_string($_POST['assignTaskOwner']);
    $assigntaskDuration = mysql_real_escape_string($_POST['assignTaskDuration']);
    $updateUpcomingTask = "UPDATE task SET Task_IsTaken = '1' AND Task_No = '$assigntaskNo'";
    $createUserTask = "INSERT INTO user_task (User_Email, Task_No, Task_Duration, Task_DateTaken, Task_DateFinished) 
                        VALUES ('$assigntaskOwner', '$assigntaskNo', '$assigntaskDuration', '$now', NULL)";
    $sqlResult2 = mysql_query($updateUpcomingTask);
    $sqlResult3 = mysql_query($createUserTask);

else

    echo "No task selected";
    $errorCode = 2;


【问题讨论】:

快速浏览后发现执行查询时没有错误检查。 您似乎正在使用 $updateUpcomingTask 查询更新所有行 - 没有 WHERE 子句。 【参考方案1】:

您的代码应更改为:

if(isset($_POST['btnAssignTask']))

    if($_POST['assignTaskName']!=NULL)

    $assigntaskName = mysql_real_escape_string($_POST['assignTaskName']);
    $assigntaskNo = intval($_POST['assignTaskNo']);
    $assigntaskOwner = mysql_real_escape_string($_POST['assignTaskOwner']);
    $assigntaskDuration = mysql_real_escape_string($_POST['assignTaskDuration']);
    $updateUpcomingTask = "UPDATE task SET Task_IsTaken = '1' WHERE Task_No = $assigntaskNo";
    $createUserTask = "INSERT INTO user_task (User_Email, Task_No, Task_Duration, Task_DateTaken, Task_DateFinished) 
                    VALUES ('$assigntaskOwner', '$assigntaskNo', '$assigntaskDuration', '$now', NULL)";
    $sqlResult2 = mysql_query($updateUpcomingTask);
    $sqlResult3 = mysql_query($createUserTask);

else

    echo "No task selected";
    $errorCode = 2;


【讨论】:

以上是关于更新新记录时,以前更新的记录会恢复 MySQL PHP的主要内容,如果未能解决你的问题,请参考以下文章

MySQL BinLog 恢复误更新删除数据

MySQL BinLog 恢复误更新删除数据

MySQL BinLog 恢复误更新删除数据

MySQL BinLog 恢复误更新删除数据

如数据不存在就插入,存在就更新

mysql如何让时间属性不自动更新