尽管进行了空检查,为什么pg_fetch_array返回null?

时间:2017-02-18 22:33:12

标签: php postgresql

我在主页中的某个函数调用时执行了这个php案例。当我输入我的变量时:$ tutorReasonString =“我很好并且正在工作。”和$ clientReasonString =“我也很好,谢谢你问”,这里没有错。但是当我尝试使用pg_fetch_array()获取它们时,我得到返回的NULL值。

请注意,tutorabsence和clientabsence表没有与任何类型的SQL触发器连接,我只在另一个执行中为它们分配完全相同的id,这是从另一个表中使用php检索的。

case "absencePc":
                
                $id = array_search(post("id"), $_SESSION["keyhash"]);
                
                $tutorAbsSql = "SELECT reason FROM tutorabsence WHERE id='$id'";
                $tutorReason = pg_query($tutorAbsSql);
                if(pg_fetch_row($tutorReason) == NULL) {
                    
                    $tutorStatus = "0";
                    $tutorReasonString = "";
                    
                } else {
                    
                    $tutorStatus = "1";
                //  $tutorReasonString = "I'm working"; This works  
                
                // This returns null.
                    $tutorReasonFetch = pg_fetch_array($tutorReason);
                    $tutorReasonString = $tutorReasonFetch["reason"];
                    
                   
                };
                
                
                $clientAbsSql = "SELECT reason FROM clientabsence WHERE id='$id'";
                $clientReason = pg_query($clientAbsSql);
                if(pg_fetch_row($clientReason) == NULL) {
                    
                    $clientStatus = "0";
                    $clientReasonString = "";

         
                } else {
                    
                                        
                    $clientStatus = "1";  
                //  $clientReasonString = "I'm working";  This works
                
                // This returns null.
                    $clientReasonFetch = pg_fetch_array($clientReason);
                    $clientReasonString = $clientReasonFetch["reason"];
                   
                    
                };
                
         $response[] = array("tutorReason" => $tutorReasonString,
                             "clientReason" => $clientReasonString,
                             "tutorStatus" => $tutorStatus,
                              "clientStatus" => $clientStatus);
                
                echo json_encode($response);
                
break;

1 个答案:

答案 0 :(得分:2)

你遇到的问题是你从1个结果中获取两次:

$tutorAbsSql = "SELECT reason FROM tutorabsence WHERE id='$id'";
$tutorReason = pg_query($tutorAbsSql);

if(($row = pg_fetch_row($tutorReason)) != false){
  $tutorStatus = "1";
  $tutorReasonString = $row[0];
  print_r($row);
} else {
  $tutorStatus = "0";
  $tutorReasonString = ""; 
}

它在内部向前移动结果指针,然后pg_fetch_array()获取下一个不存在的值。

相关问题