使用UPDATE QUERY将最后一行值添加到所有现有行

时间:2016-04-17 12:33:15

标签: php mysql

我想使用列

更新表格

更新前

 ROLLNO    NAME     ATTENDANCE     DAY   MONTH    YEAR
  1        Name1    PRESENT        16    04       2016
  2        Name2    PRESENT        16    04       2016
  3        Name3    PRESENT        16    04       2016

更新后我试图将出勤率更改为" ABSENT"适合所有人

但更新后会发生什么

 ROLLNO    NAME     ATTENDANCE     DAY   MONTH    YEAR
  3        Name3    ABSENT         16    04       2016
  3        Name3    ABSENT         16    04       2016
  3        Name3    ABSENT         16    04       2016

这是更新数据库的代码。但是这里的问题是整个表格在更新时填充了最后一行的值。我已经回显了foreach中的值,以检查存储和传递的值是否正确并且是完美的。问题是将其更新到DB

foreach ($name_array as $key => $name_values) {

    $name_values = mysqli_real_escape_string($connection,$name_values);
    $roll_values = mysqli_real_escape_string($connection,$roll_array[$key]);
    $att_values = mysqli_real_escape_string($connection,$att_array[$key]);
    echo $name_values."<br>";
    echo $att_values."<br>";
    echo $roll_values."<br>";
    $sql= "UPDATE `aclass10` SET 
                             Name='".$name_values.
                             "',attendance='".$att_values.
                             "',RollNo='".$roll_values.
                             "',day='".$day.
                             "',month='".$month.
                             "',year='".$year.
                             "'WHERE day='".$day."'";
    $result = mysqli_query($connection,$sql);
}

我犯的错误是什么以及如何解决?

2 个答案:

答案 0 :(得分:2)

你的where子句错了!

更改它以使用滚动编号,我认为这是唯一的,就像这样,您还可以简化查询字符串以使其更易于阅读。

foreach ($name_array as $key => $name_values) {

    $name_values = mysqli_real_escape_string($connection,$name_values);
    $roll_values = mysqli_real_escape_string($connection,$roll_array[$key]);
    $att_values = mysqli_real_escape_string($connection,$att_array[$key]);
    echo $name_values."<br>";
    echo $att_values."<br>";
    echo $roll_values."<br>";
    $sql= "UPDATE `aclass10` SET 
                             Name='$name_values',attendance='$att_values',
                             RollNo='$roll_values',day='$day`,
                             month='$month,year='$year
                             WHERE RollNo ='$roll_values'";
    $result = mysqli_query($connection,$sql);
}
  

您的脚本可能会向SQL Injection开放,具体取决于您创建输入数组的方式。您应该检查此帖子并尝试使用参数化查询。

如果您之前的查询可以将所有roll_number列修改为相同的ID,那么您可能希望将其设置为一个唯一的密钥,但这会删除许多其他我不了解您的数据库设计的内容我无法确定

答案 1 :(得分:0)

我怀疑您只需使用一个循环更新要更新的行:

update aclass10
    set attendance = 'ABSENT'
    where ??;

我不确定这是什么情况。如果它适用于所有人,那么您就不需要where条款。如果是某一天,那么:

update aclass10
    set attendance = 'ABSENT'
    where year = $year and month = $month and day = $day;

(注意:这应该是一个参数化值,但我将其保留为原始形式。)

另一个问题是,当MySQL提供非常方便的数据类型date来存储此类信息时,为什么要使用三列作为日期。