2011-10-07 2 views
1

이유는 확실하지 않지만 다음 코드를 실행하면 데이터베이스에 아무 것도 없는데 PHP 페이지 대신 [false] 오류가 발생합니다. 올바른 오류 메시지PHP가 [false]를 반환해도 요청하지 않았습니다.

public function fetchfriends($userid) 
{ 
    $this->userid = $userid; 
    $contact_check = mysql_query(" 
       SELECT * 
       FROM user_contact 
       WHERE from_userid = '{$this->userid}' 
       AND approved != 1 
      "); 


if(!mysql_num_rows($contact_check)) 
     { 

       $arr = array("error" => "No Friends?<br/>Search above for New users or invite some friends."); 
       print json_encode($arr); 
     } 
     else 
     { 
       $friendlook = mysql_query(" 
        SELECT friend.to_userid, 
          info.username, 
          info.firstname, 
          info.lastname, 
          info.status, 
          astatus.onlinestatus 

        FROM  user_contact AS friend 
        LEFT JOIN user_info AS info ON friend.to_userid = info.id 
        LEFT JOIN user_online AS astatus ON friend.to_userid = astatus.userid 

        WHERE friend.from_userid = '{$this->userid}' 
         AND friend.approved = 1 
         AND friend.to_userid = info.id 

        ORDER BY astatus.onlinestatus DESC 
       "); 

       $row = mysql_fetch_assoc($friendlook); 
       $rows[] = $row; 
       print json_encode($rows); 
     } 
    } 

왜 그런지 궁금한가요?

+0

, 친구 :

코드는 것처럼 보일 것이다. :) 정말 중요합니다. – Teekin

+0

상위 쿼리에 적용된 조건에서 낮은 쿼리 값을 얻으려고하는 것 같습니다. –

답변

1

:

내가 조언 당신은 오류 유형을 확인합니다. 문제는 첫 번째 결과가 있고 두 번째 결과가 없으면 오류 메시지가 표시되지 않지만 지금은 [false]입니다.당신은 정말 거기에 들여 쓰기를 수정해야

public function fetchfriends($userid) 
{ 
    $this->userid = $userid; 
    $contact_check = mysql_query("SELECT * FROM user_contact WHERE from_userid = '{$this->userid}' AND approved != 1"); 

    if(mysql_num_rows($contact_check)) 
    { 
     $friendlook = mysql_query("SELECT friend.to_userid, info.username, info.firstname, info.lastname, info.status, astatus.onlinestatus FROM user_contact as friend LEFT JOIN user_info as info ON friend.to_userid = info.id LEFT JOIN user_online as astatus ON friend.to_userid = astatus.userid WHERE friend.to_userid = info.id AND friend.from_userid = '{$this->userid}' AND friend.approved = 1 ORDER BY astatus.onlinestatus DESC"); 

     if (mysql_num_rows($friendlook)) { 
      $row = mysql_fetch_assoc($friendlook); 
      $rows[] = $row; 
      print json_encode($rows); 
     } else { 
      $arr = array("error" => "Your friends are not online"); 
      print json_encode($arr); 
     } 

     return; 
    } 

    $arr = array("error" => "No Friends?<br/>Search above for New users or invite some friends."); 
    print json_encode($arr); 
} 
+0

한 가지 더 : SELECT 대신 SELECT COUNT (*) 사용 * – biziclop

0

false를 인쇄하지 않으려면 if (mysql_num_rows($friendlook)) ($ friendlook 부분에 있음)을 사용하여 아무 것도 인쇄하려고 시도하기 전에 결과가 있는지 확인하십시오.

결과가 없으면 아무 것도 인쇄되지 않습니다.. 그 성가신 문제는 없을 것입니다.

실적주의 사항 : 대신 에코 사용 인쇄를 사용하지 마십시오.

+1

왜 Print over Echo가 잘못된 것입니까? – RussellHarrower

+2

인쇄/에코간에 어떤 차이가 있습니까? 에코보다는 인쇄물을 사용하라고 들었습니다. ;) – Teekin

+0

@RussellHarrower print는 부울 true를 반환하고 echo는 반환 값을 반환하지 않습니다. CPU 시간을 절약하고 많이 사용되는 스크립트의 성능을 향상시킵니다. –

2

http://php.net/manual/en/function.mysql-fetch-assoc.php

반환 값 :. 행이 더 이상없는 경우 연관 인출 된 행에 해당 문자열의 배열 또는 FALSE를 반환 "

당신의 선택 문 0 행을 반환 , mysql_fetch_assocfalse을 반환하면 false 값을 $rows에 삽입하여 단일 false 값을 포함하는 배열을 얻습니다.

유효한 행을 받았는지 확인하려면 if($row === false) 또는 if($row)을 사용하십시오.

0

아니 정확히 질문에 대한 답변,하지만 어쩌면 당신은 같은 것을 사용하려는

public function friendsOutputAsJSON($userid) 
{ 
    $this->userid = $userid; 
    $result = mysql_query(" 
     SELECT 
      friend.to_userid, 
      info.username, info.firstname, info.lastname, info.status, 
      astatus.onlinestatus 
     FROM 
      user_contact as friend 
     LEFT JOIN 
      user_info as info 
     ON 
      friend.to_userid = info.id 
     LEFT JOIN 
      user_online as astatus 
     ON 
      friend.to_userid = astatus.userid 
     WHERE 
      friend.to_userid = info.id 
      AND friend.from_userid = '". mysql_real_escape_string($userid). "' 
      AND friend.approved = 1 
     ORDER BY 
      astatus.onlinestatus DESC 
    "); 
    if (!$result) { 
     yourErrorHandler(); 
    } 

    $rows = array(); 
    while($row=mysql_fetch_assoc($result)) { 
     $rows[] = $row; 
    } 

    if(empty($rows)) 
    { 
     $rows = array("error" => "No Friends?<br/>Search above for New users or invite some friends."); 
    } 
    print json_encode($arr); 
} 

즉, 모든 레코드가 (이를 사용해야이 있는지 확인하기 위해 추가 쿼리를 수행하지

  • 당신이 그것을 지키고 싶다면 백작 (*)을 넣으십시오.
  • 첫 번째 레코드 만 가져 오기 대신 모든 레코드를 가져옵니다.
  • mysql을 사용하여 일부 레코드를 가져 왔는지 확인하십시오 기능에 대해 하나의 리턴/인쇄 "출구 점"을 가진
  • _num_rows
  • (아마도 SQL 주입을 방지 -이 함수를 호출하기 전에 확인하는 방법/어떤 $ 사용자 ID가 될 수 있습니다에 따라 다름) 내가
0

json_encode()가 실패했다고 생각하십시오. 당신은이 SQL 쿼리를 가지고 첫 번째 결과가있는 경우에만 확인

switch (json_last_error()) { 
     case JSON_ERROR_NONE: 
      echo ' - No errors'; 
     break; 
     case JSON_ERROR_DEPTH: 
      echo ' - Maximum stack depth exceeded'; 
     break; 
     case JSON_ERROR_STATE_MISMATCH: 
      echo ' - Underflow or the modes mismatch'; 
     break; 
     case JSON_ERROR_CTRL_CHAR: 
      echo ' - Unexpected control character found'; 
     break; 
     case JSON_ERROR_SYNTAX: 
      echo ' - Syntax error, malformed JSON'; 
     break; 
     case JSON_ERROR_UTF8: 
      echo ' - Malformed UTF-8 characters, possibly incorrectly encoded'; 
     break; 
     default: 
      echo ' - Unknown error'; 
     break; 
    } 
관련 문제