1
$query="update attendance 
SET 
    `day1`='$day1', `day2`='$day2',  `day3`='$day3', `day4`='$day4', 
    `day5`='$day5', `day6`='$day6', `day7`='$day7', `day8`='$day8', 
    `day9`='$day9', `day10`='$day10', `day11`='$day11', `day12`='$day12', 
    `day13`='$day13', `day14`='$day14', `day15`='$day15', `day16`='$day16', 
    `day17`='$day17', `day18`='$day18', `day19`='$day19', `day20`='$day20', 
    `day21`='$day21', `day22`='$day22', `day23`='$day23', `day24`='$day24', 
    `day25`='$day25', `day26`='$day26', `day27`='$day27', `day28`='$day28', 
    `day29`='$day29', `day30`='$day30', `day31`='$day31', `accident`='$a1', 
    `disiplinary`='$d1', `family_death`='$fd1', `family_illness`='$fi1', 
    `holiday`='$h1', `illness`='$i1', `jury_duty`='$j1', `leave`='$l1', 
    `layoff`='$lo1', `personal`='$p1', `tardy`='$t1', `vacation`='$v1' 
WHERE `month`='January'";

$result=mysql_query($query);

这里day1更新的值(值为1),下一次更新的值为day21,此时day2值被更新(1),但day1值变为零。

我所做的?

4

1 回答 1

2

您表达查询的方式,所有变量$day1都必须在 PHP 中设置。如果不是,则将一个空字符串粘贴到请求中,然后由 MySQL 服务器将其转换为零。

因此,如果您只想修改day2,请执行以下操作:

UPDATE attendance SET day2 = ? WHERE month = 'January'

也就是说,您可以通过多种方式改进当前的方法。

  • 您不应该使用mysql_query它,因为它已被弃用
  • 您不应该直接在查询中包含变量,因为这会为错误和 SQL 注入漏洞打开大门。?改为使用占位符,并在执行此查询时提供实际值。
  • 每天有一列看起来是一个非常糟糕的数据库模式。取而代之的是一张桌子,每天有一排。您可以根据输出计算每月概览,但一般来说,这样的请求在数据库级别上会更容易处理。如果您每个月想要一些列,您可以将这些列放在一个额外的表中。
  • 您可能应该按照刚才描述的方式使用DATE类型来描述每一天。如果你真的必须有一个每个月有一行的表,那么你可能仍然用 aDATE来描述它,用当月的第一天来标识整个月。这将允许您轻松地在该列上使用日期和时间函数。如果您想要单独的年份和月份列,我想我仍然会按数字而不是名称来识别月份。
于 2012-10-04T10:46:39.493 回答