SQL - 更改现有行

时间:2016-09-09 14:25:01

标签: php mysql sql-server

我使用PHP创建一个网站,管理员可以访问和审核员工提交的表单。在审阅PHP文件中,我创建了两个基本上批准或不批准表单的按钮。在他们点击其中一个按钮后,他们被重定向到另一个PHP文件,该文件实际上在MySQL数据库中插入了一个名为“已处理”的列中的更改。它将未处理的0更改为1,并将其处理。我所指的表格包含诸如formid,fullname,department和其他与工作相关的内容,以及“已处理”的列。允许经理查看是否有待审核的待处理表单的列。

我的问题是,我不知道如何实际允许MySQL找到正确的行,只更改名称为“已处理”的单元格。从0到1,无需再次插入每个单元格。这就是我迄今为止所尝试过的事情:

$id = $_SESSION[id];
$fullname = $_SESSION[fullname];
$teamformid = $_SESSION[teamformid];

if (isset($_POST['approved'])) {
    $sql = "INSERT INTO carforms (processed) where aboveid='$id' and processed='0' and teamformid=$teamformid
    VALUES ('0')";
}

else if (isset($_POST['disapproved'])) {
    //todo
}

如何告诉SQL只查找我想要的特定行并只更改一个已处理的列?

另外,在使用INSERT INTO命令时,是否总是要输入每个列名?

提前致谢。

4 个答案:

答案 0 :(得分:0)

尝试:

"UPDATE carforms SET processed = 1 WHERE aboveid = $id AND teamformid = $teamformid"

答案 1 :(得分:0)

根据我的问题解释,您似乎需要使用MySQL UPDATE命令。这将更新任何现有行。

例如,假设您有一个名为'forms'的表,其中包含一个主键'form_id'和一个名为'processed'的字段。

如果我们想将'processed'的值更改为'1',我们会运行...

 UPDATE forms SET processed = 1 WHERE form_id = [whatever number the form is];

显然这仅适用于表单(带有form_id)已经存在的情况

答案 2 :(得分:0)

使用以下代码,它将为您效劳。

$id = $_SESSION[id];
$fullname = $_SESSION[fullname];
$teamformid = $_SESSION[teamformid];

if (isset($_POST['approved'])) {
    $sql = "UPDATE `carforms` SET processed = '1' WHERE `aboveid` = '".$id."' AND `teamformid` = '".$teamformid."'";
}

答案 3 :(得分:0)

没有" INSERT ... WHERE"在SQL中。

要更改现有记录,有2个选项,REPLACE或UPDATE。前者将创建记录,如果它尚不存在并且具有与INSERT类似的语法。 UPDATE使用WHERE子句来标识要更改的记录。

使用REPLACE很棘手。它需要确定它是应该插入新记录还是更新现有记录 - 它通过检查所呈现的数据值是否已经存在于表中的唯一索引中来实现 - 如果您没有任何唯一索引则它永远不会更新记录。即使您刚才拥有唯一索引,随着应用程序的发展,这些索引的结构也会随着时间而变化,因此我建议不要使用REPLACE for OLTP。

在你的问题中,你写道:

  

其中aboveid =' $ id'并处理=' 0'和teamformid = $ teamformid

(如果您已发布架构的相关部分,那将会有所帮助)

' ID'通常描述唯一标识符。所以不应该有多个具有相同id的记录,因此WHERE子句的其余部分是多余的(但确实提供了SQL注入的途径 - 这不是一件好事)。

如果carforms中的相关记录由&id; id'的值唯一标识。那么你的代码应该是 之类的东西:

 $id=(integer)$id;
 $sql = "UPDATE carforms SET processed = $action WHERE aboveid=$id";

但这里还有另一个问题。记录有3种可能的状态:

  • 尚未处理
  • 下降
  • 批准

但是你只告诉了我们两个可能的状态。假设初始状态为null,则代码应为:

$action=0;
if (isset($_POST['approved'])) {
  $action=1;
}
$id=(integer)$id;
$sql = "UPDATE carforms SET processed = $action WHERE aboveid=$id";
if ($id && 
    (isset($_POST['disapproved']) || isset($_POST['approved']))
   ) {
  // apply the SQL to the database
} else {
  // handle the unexpected outcome.
}