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


Last row value is added to all the existing rows with UPDATE QUERY

我想用列更新一个表

更新之前

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

更新后,我试图将每个的出席人数更改为"缺席"

但更新后发生的是

 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);
}

我犯的错误是什么?如何改正?

您的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注入开放,这取决于您创建输入数组的方式。您应该查看这篇文章,并尝试使用参数化查询。

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

我怀疑您可以用一个循环来更新想要更新的行:

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

我不确定条件是什么。如果它适用于所有人,那么你就不需要where子句。如果是某一天,则:

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

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

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