php
  • mysql
  • 2012-10-04 131 views 1 likes 
    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),下一个更新那个时候day2值更新(1),但day1值值day2为1, 更改为零。如何更新在php mysql数据库

    我该怎么办?

    +5

    你知道'标准化'是什么吗? – diEcho

    +0

    你确定你所有的变量都设置了吗? ('的var_dump($第1天,第2天$,$第三天...)')。如果是的话,也许你的表结构不适合变量类型。 – Touki

    回答

    2

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

    所以,如果你只是想修改day2,然后做到这一点:

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

    这就是说,有一些方法你怎么可以改善你目前的做法。

    • 您不应该使用mysql_query,因为它是deprecated
    • 您不应该直接在查询中包含变量,因为这会为漏洞和SQL注入漏洞打开大门。使用占位符?代替,而provide执行此查询时的实际值。
    • 每天有一列看起来像一个非常糟糕的数据库模式。取而代之的是每天都有一张单行表。您可以根据您的输出计算每月概览,但通常这样的请求在数据库级别上更容易处理。如果你想每个月有一些列,你可以把它们放在一个额外的表中。
    • 您可能应该使用DATE type来描述每一天,如上所述。如果你真的必须每月有一行,那么你可能仍然使用DATE来描述它,使用每月的第一天来识别整个月份。这将允许您轻松地在该列上使用日期和时间函数。如果你想要单独的年份和月份列,我想我仍然可以通过数字来确定月份,而不是名称。
    相关问题