php
  • mysql
  • 2012-10-04 127 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來描述它,使用每月的第一天來識別整個月份。這將允許您輕鬆地在該列上使用日期和時間函數。如果你想要單獨的年份和月份列,我想我仍然可以通過數字來確定月份,而不是名稱。
    相關問題