2011-04-08 1 views
1

가능한 중복 :
Warning: mysql_fetch_* expects parameter 1 to be resource, boolean given errorPHP 및 MySQL을 - mysqli_free_result은() 매개 변수 (1) 부울 라인에 주어진 mysqli_result을 기대 (110)

라인 (110)은 mysqli_free_result($r); 누군가가 내가 '무엇을 설명 할 수있다 여기서 잘못하고 어떻게 해결할 수 있습니까?

다음은 코드의 일부입니다.

if(isset($user_pass) && ($user_pass == TRUE) && !empty($salt)) { 
    $q = "SELECT users.user_id, users.first_name, users.user_level FROM users JOIN contact_info ON contact_info.user_id = users.user_id WHERE (contact_info.email = '" . $e . "' OR users.username = '" . $e . "') AND users.password = '" . $sha512 . "' AND users.active IS NULL";   
    $r = mysqli_query ($dbc, $q) or trigger_error("Query: $q\n<br />MySQL Error: " . mysqli_error($dbc)); 

    while($row = mysqli_fetch_array($r)){ 
     $approved = $row['user_id']; 
    }  

    if ((@mysqli_num_rows($r) == 1 && $approved == 2)) { 

     $_SESSION = mysqli_fetch_array ($r, MYSQLI_ASSOC); 
     // check if user is logged in then update the old login date 
     $u = "UPDATE users JOIN contact_info ON contact_info.user_id = users.user_id SET users.last_login = NOW(), users.deletion = 0, users.deletion_date = NULL WHERE (contact_info.email = '" . $e . "' OR users.username = '" . $e . "') AND users.password = '" . $sha512 . "' AND users.active IS NULL"; 
     // save the info to the database 
     $r = mysqli_query ($dbc, $u); 
     mysqli_free_result($r); 
     mysqli_close($dbc); 

     exit(); 

    } else { 
     echo 'Error; 
    } 

} else { 
    echo 'Error'; 
} 

답변

0

mysql/mysqli 함수는 프로 시저 모드에서 부울 값을 반환합니다. 실패하면 FALSE를 반환합니다. 내부 루프에서 쿼리가 성공했는지 확인하지 않았습니다. 실패했을 가능성이 가장 높으며 false를 반환하면 _free_result() 호출로 전달됩니다.

1

쿼리가 실패했기 때문입니다. , 또한

if(!$r) 
    echo mysqli_error($dbc) 

당신이 MySQLi를 사용하고 있기 때문에, 어쩌면 당신은 prepared statements를 통해 매개 변수화 된 쿼리를 사용하는 방법에 대해 생각해야합니다 다음을 사용하여 오류를 얻을 수 있어야합니다.

+1

+1이 쿼리는 전자 메일 필드의 악의적 인 입력에 매우 취약합니다. – Fenton

2

INSERT와 같은 일부 쿼리가 false를 반환하는 경우 확실하지 않습니까 ?? 이 문제는 이전 php/mysql에서 발생한 것 같습니다.

관련 문제