2017-12-08 1 views
0

사용자 숫자의 평균을 얻는 함수를 작성하려고합니다. 테이블에는 userID W tieBreakerPoints가 있습니다.오류가없고 항상 결과가 0입니다.

function getUserTBA($userID) { 
    global $mysqli; 

    // loop through user totals & calculate average for each user 
    $sql = "SELECT u.userID, p.userID, AVG(p.tieBreakerPoints) AS 'avarage' "; 
    $sql .= "FROM " . DB_PREFIX . "picksummary p"; 
    $sql .= "inner join " . DB_PREFIX . "users u on p.userID = u.userID ";  
    $sql .= "WHERE p.userID = " . $user->userID . " "; 
    $sql .= "GROUP BY p.userID"; 
    $query = $mysqli->query($sql); 

    if ($query->num_rows > 0) { 
     $row = $query->fetch_array(); 
     return (int)$row['average']; 
    } 

    return 0; 
} 

나는 함수를 호출 할 때만 0 값을 얻는 것처럼 보이지만 SQL에서 직접 SQL 쿼리를 실행하면 결과가 나타납니다. 이 기능으로 뭔가를 놓치고 있습니까?

+1

여기서'DB_PREFIX'가 정의 되었습니까? '$ user'는 어디에 정의되어 있습니까? 이것은 독립적 인 함수 또는 클래스 메소드입니까? –

+0

경고 메시지가 나타 납니까? – Naeem

+1

'return 0;'앞에'echo $ mysqli-> error;'를 넣고 그 내용을 알려주십시오. – musashii

답변

1

다른 문제가있을 수 있지만 $user (그리고 확장하여 $user->userID)은 기능 범위에서 정의되지 않습니다. 따라서, 당신은 거기 null 값을 연결하고, 그래서 당신이 발생하고있는 SQL은 코멘트에 언급 된 오류의 원인이되는

WHERE p.userID = GROUP BY p.userID 

입니다. 값을 예상하는 키워드가 있기 때문에 구문 오류입니다.

나는 함수에 대한 매개 변수로 $userID을 보았지만 사용되지 않았습니다. 그냥 $user일까요?

1

PHP가 오류를 발생 시키도록 구성해야합니다.

귀하의 쿼리는 'avarage'라는 가상 열을 생성하지만 귀하의 PHP 코드는 '평균'맞춤법을 사용합니다. 오류를 켜면이 사실이 매우 분명해졌습니다.

+0

좋은 지적! 맞춤법 오류를 알지 못했습니다. 하지만 당신 말이 맞아, PHP 통역사는 그것을 놓치지 않았을 것입니다. –

+0

지적 해 주셔서 고맙습니다. 문제를 해결했지만 해결되지 않았습니다. – JerryH