2017-02-18 11 views
0

メインページの関数で呼び出されたときにこのPHPケースが実行されました。 $ tutorReasonString = "私はうまく働いています。" $ clientReasonString = "尋ねてくれてありがとう"、何も間違っていません。しかし、pg_fetch_array()でそれらを取得しようとすると、NULL値が返されます。pg_fetch_arrayがnullチェックにもかかわらずnullを返すのはなぜですか?

tutorabsenceテーブルとclientabsenceテーブルはどのような種類のSQLトリガにも接続されていないことに注意してください。別のテーブルの行からPHPで取得された別の実行に同じIDだけを割り当てます。

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つの結果から2回フェッチしているということです。

$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でassoc配列ではなくnumでフェッチしたコードを更新しました。 $ tutorReasonString = $ row [0]; ' – Xorifelse

+0

これで動作します。ありがとう! – Ahmet

関連する問題