2017-02-18 55 views
0

我有這個php的情況下執行時,我的主頁中的函數調用。當我輸入像這樣的變量時:$ tutorReasonString =「我很好,工作。」和$ clientReasonString =「我也很好,謝謝你的詢問」,這裏沒有什麼錯。但是當我嘗試用pg_fetch_array()獲取它們時,我得到了返回的NULL值。儘管爲空檢查,爲什麼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;

+0

不知道檢查[docs](http://php.net/manual/en/function.pg-fetch-array.php)上的「何時」可以返回「null」?我的意思是,這看起來很愚蠢,但這將是我第一個瞭解功能行爲的第一步。 – Xorifelse

+0

顯然,在我打擾到在這裏問一個問題之前,我檢查了幾次確切的網頁。我會錯過的東西。 – Ahmet

+0

你是否期望''每個'$ id'多個'reason',還是隻有一個? – Xorifelse

回答

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()然後取爲下一個不存在的值。

+0

我按照您的建議改變了代碼。奇怪的是,我現在得到了未定義的索引錯誤,但是結果顯示在print_r($ row)中。 [這裏是截圖。](http://oi64.tinypic.com/2i06x7b.jpg) – Ahmet

+0

我已經更新了代碼,在PostgreSQL中它是通過num獲取的,而不是一個assoc數組。所以它的'$ tutorReasonString = $ row [0];' – Xorifelse

+0

它現在可以工作。謝謝! – Ahmet