2017-02-18 4 views
0

У меня этот случай php выполняется при вызове функции на моей главной странице. Когда я ввожу свои переменные следующим образом: $ tutorReasonString = «Я в порядке и работаю». и $ clientReasonString = «Я тоже в порядке, спасибо, что спросил», здесь нет ничего плохого. Но когда я пытаюсь получить их с помощью pg_fetch_array(), я получаю возвращаемые значения NULL.Почему pg_fetch_array возвращает значение null, несмотря на нулевую проверку?

Обратите внимание, что таблицы tutorabsence и clientabsence не связаны с каким-либо триггером SQL, я назначаю им только один и тот же идентификатор в другом исполнении, который извлекается из строки другой таблицы с 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», или это только один? – 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, а не массив-ассоциированный. Таким образом, его '$ tutorReasonString = $ row [0];' – Xorifelse

+0

Теперь он работает. Благодаря! – Ahmet