php
  • mysql
  • 2016-02-25 67 views 2 likes 
    2

    我有一個查詢,表UPDATE的列。MySQL查詢只完成80%的查詢,爲什麼它缺少20%的查詢?

    $sql = $con->query("UPDATE projects SET 
           ProjectName = '{$UpdatePName}', 
           StartDate = '{$UpdatePStart}', 
           EndDate = '{$UpdatePEnd}', 
           AStartDate = '{$UpdateAStart}', 
           AEndDate = '{$UpdateAEnd}', 
           ProjectBio = '{$UpdateBio}' 
          WHERE ProjectID = '$Project'") or die(mysqli_error($con)); 
    

    但是它沒有更新StartDateEndDate。它用於在我添加AStartDateAEndDate之前進行更新,但我不明白它們會對它造成什麼影響?

    我檢查了拼寫錯誤等,所以希望我沒有漏掉任何明顯的東西。

    下面的代碼整段:

    $Project = $_GET['id']; 
    
        $result = $con->query("SELECT * FROM projects WHERE ProjectID ='$Project'") or die(mysqli_error($con)); 
    
        if ($result){ 
        $row = mysqli_fetch_assoc($result); 
    
        $_SESSION["ProID"] = $row['ProjectID']; 
        $_SESSION["ProName"] = $row['ProjectName']; 
        $_SESSION["PStDate"] = $row['StartDate']; 
        $_SESSION["PEnDate"] = $row['EndDate']; 
        $_SESSION["ProBio"] = $row['ProjectBio']; 
        $_SESSION["AStDate"] = $row['AStartDate']; 
        $_SESSION["AEnDate"] = $row['AEndDate']; 
        } 
    
    if(isset($_POST['Update'])){ 
    
    //Ternary expressions to switch between POST or SESSION variables. 
    $UpdatePName = ($_POST['ProjName'] != '')? $_POST['ProjName'] : $_SESSION["ProName"]; 
    
    $UpdatePStart = ($_POST['StarDate'] != '')? $_POST['StarDate'] : $_SESSION["PStDate"]; 
    
    $UpdatePEnd = ($_POST['EnDate'] != '')? $_POST['EnDate'] : $_SESSION["PEnDate"]; 
    
    $UpdateBio = ($_POST['ProDesc'] != '')? $_POST['ProDesc'] : $_SESSION["ProBio"]; 
    
    $UpdateAStart = ($_POST['ActStartDate'] != '')? $_POST['ActStartDate'] : $_SESSION["AStDate"]; 
    
    $UpdateAEnd = ($_POST['ActEndDate'] != '')? $_POST['ActEndDate'] : $_SESSION["AEnDate"]; 
    
    $sql = $con->query("UPDATE projects SET 
            ProjectName = '{$UpdatePName}', 
            StartDate = '{$UpdatePStart}', 
            EndDate = '{$UpdatePEnd}', 
            AStartDate = '{$UpdateAStart}', 
            AEndDate = '{$UpdateAEnd}', 
            ProjectBio = '{$UpdateBio}' 
            WHERE ProjectID = '$Project'") or die(mysqli_error($con)); 
    
    header('Location: Projects.php'); 
    die(); 
    } 
    
    +0

    確定的值在會話中設置?我也建議利用mysqli的參數綁定,否則你是開放的sql注入。 – aynber

    +0

    您可以激活mysql的[通用查詢日誌](http://dev.mysql.com/doc/refman/5.7/en/query-log.html)並查看實際到達服務器的查詢/數據。 – VolkerK

    +0

    '$ UpdatePStart' vs'$ UpdateStart' – Ties

    回答

    2

    我認爲這是一個不匹配在變量名的碼,而在情況更新後的變量設置變量設置要設置變量$ UpdateStart,$ UpdateEnd的代替$ UpdatePStart,$ UpdatePEnd由於它始終保持與從數據庫中獲得的值相同,並且永遠不會更新。

    $UpdatePStart = $_SESSION["PStDate"]; 
    if ($_POST['StarDate'] != '') { 
         $UpdateStart = $_POST['StarDate'];} 
    $UpdatePEnd = $_SESSION["PEnDate"]; 
    if ($_POST['EnDate'] != '') { 
          $UpdateEnd = $_POST['EnDate'];} 
    

    應該是:

    $UpdatePStart = $_SESSION["PStDate"]; 
        if ($_POST['StarDate'] != '') { 
          $UpdatePStart = $_POST['StarDate'];} 
        $UpdatePEnd = $_SESSION["PEnDate"]; 
        if ($_POST['EnDate'] != '') { 
           $UpdatePEnd = $_POST['EnDate'];} 
    
    +0

    啊,很好看!謝謝您的回答。 – user2258597

    1

    我有一個明確的懷疑,這兩個會話值設置或不?因爲這些都是在表中的新列,所以我爲空

    $_SESSION["AStDate"] = $row['AStartDate']; 
    $_SESSION["AEnDate"] = $row['AEndDate']; 
    

    所以在UPDATE查詢使用它們之前,嘗試打印$UpdateAStart & $UpdateAEnd

    +0

    這不提供答案...它只是一個黑暗中的鏡頭。 – Phiter

    相關問題