为什么我的pg_query更新方法会跳过行?

时间:2017-02-06 21:15:16

标签: php json postgresql

我只是一个使用php的初学者,在PostgeSQL上更是如此。我可以说我对php,json和sql的了解非常有限。

每当我从数据库创建或删除记录时,我都创建了一个更新方法来刷新我返回的数据。但有时,当我创建一个新记录时,新记录不会从php返回,直到我使用刷新功能两次。有时,当我删除记录时也会发生同样的情况,我会在一次点击后收到结果。这是随机发生的,有时是第一次点击,有时是第四次点击。

示例:假设我在桌面上有现有记录并添加了新记录。在偶然的情况下,它返回了[[" 6"," 1"," Jason Smith","& id",&#34 ; 89"]什么时候它应该返回[[" 6"," 1"," Jason Smith","& id&#34 ;," 89"] [[" 6"," 1"," King Sczhult","& id&#34 ;," 90"],但是当我通过浏览器检查数据库或刷新页面时,记录就在那里。



//The function that calls php
function refresh() {
   $(".scell").html(""); 
   $("#holidayCell").html("");
  
var updateTable = {
                        
  semSchedule: $("#semesterselect").val(),
  operation: "updateTable"
}

  $.post( "scheduleengine.php", updateTable).done(function( response ) {
  if (response.val != 0){
  //This is where I decode returned table array 
  }else {
  };
     
 

                
});
 };

//This is the php switch-case.

switch($_POST["operation"]){
               
 case "updateTable":
             
  echo updateTableFunc(post("semSchedule"));
       
 break; 

//Update Function

function updateTableFunc($semID = null){
    
    
    
    $result = "";
   
    $scqrysql = "SELECT id, tutor, hour, day FROM schedule WHERE semester='$semID'";
    $scqry = pg_query($scqrysql) or die(pg_result_error());
        
    while ($row = pg_fetch_array($scqry)) {
                
    $scTutorID = $row['tutor'];
    $tqry = pg_query("SELECT id, tname, tsurname FROM tutors WHERE id='$scTutorID'") or die(pg_result_error()); 
    while($tutorrow=pg_fetch_array($tqry)){
                
    $scTutor = $tutorrow['tname'] . " " .$tutorrow['tsurname'];
                
                                          };
            
     $scHourRow = $row['hour'];
     $scDay = $row['day'];
     $scID = $row['id'];
                
     $scHour = substr($scHourRow, 2, 1);
     $scDayNameArray = array("Monday", "Tuesday", "Wednesday", "Thursday", "Friday");
     $scDayNumberArray = array("2", "3", "4", "5", "6");
     $scDayNameReplace = str_replace($scDayNameArray, $scDayNumberArray, $scDay);
            
     $resultArrays = array($scDayNameReplace, $scHour, $scTutor, "&id", $scID);
     $result[] = $resultArrays;
                

                                        };
    
     if(is_null($result)){
     $result = "";
     echo json_encode($result);
     }else{
                
     $json = json_encode($result);
     echo $json;
         };
    
    
};




1 个答案:

答案 0 :(得分:1)

那就是问题所在。看起来你正在使用jquery来调用这两个东西,并且你正在异步地执行它 - 这意味着它们几乎立即启动并且任何一个都可以先完成(竞争条件)。当" A"赢得比赛,你是金色的...当B赢得比赛时你必须再次刷新。 你需要的是打电话给" A" (更新查询)然后让它调用" B"什么时候结束。