2017-09-12 9 views
-2

이유를 모르겠지만 준비된 문을 사용하려고하면이 함수가 false를 반환하지만 준비되지 않은 문을 사용하면 true를 반환합니다. 아무도 그것을 설명 할 수 있습니까?

코드 :이 반환준비된 문이 함수에서 실패합니다 - PHP

function evalLoggedUser($conx,$id,$u,$p){ 
    $sql = "SELECT ip FROM users WHERE id=? AND username=? AND password=? AND activated=? LIMIT 1"; 
    $stmt = $conx->prepare($sql); 
    $var = 1; 
    $stmt->bind_param("issi",$id,$u,$p,$var); 
    $stmt->execute(); 
    $numrows = $stmt->num_rows; 
    if($numrows > 0){ 
     return true; 
    } 
    $stmt->close(); 
} 

$user_ok = evalLoggedUser($conn,$log_id,$log_username,$log_password); 

거짓

function evalLoggedUser($conx,$id,$u,$p){ 
$sql = "SELECT ip FROM users WHERE id='$id' AND username='$u' AND password='$p' AND activated='1' LIMIT 1"; 
    $query = mysqli_query($conx, $sql); 
    $numrows = mysqli_num_rows($query); 
    if($numrows > 0){ 
     return true; 
    } 
} 
$user_ok = evalLoggedUser($conn,$log_id,$log_username,$log_password); 

이 사실

+1

웹 서버의 오류 로그를 확인 했습니까? –

+0

오류가 없습니다. –

+0

'evalLoggedUser ($ conx, $ id, $ u, $ p)'와'evalLoggedUser ($ conn, $ log_id, $ log_username, $ log_password)'와'bind_param ("issi", $ id, $ u, $ p) , $ var)'뭔가가 여기에 더해지지 않는다면, 그것이 바로 문제입니다. 그리고 오류보고는 그것에 대해 당신에게 말했을 것입니다. –

답변

-1

문제는 단순한 인쇄상의 실수를 반환 : 당신이 준비로 4 개 매개 변수를 전달하지만, 5를 기대합니다.

참조 : $stmt->bind_param(/*"issi",*/$id,$u,$p,$var);

+0

고맙습니다.하지만이 솔루션은 이미 발견되었습니다. 나는'activated'가'enum' 타입이라고 언급하는 것을 잊었고 enum을'integer'로 전달하려고 시도했습니다. 그러나'string'으로 전달하면 멋지게 작동합니다. –

+1

왜 이것을 정답으로 선택 했습니까? TBH 나는 그것을 보지 못한다. (답변에서 말한 것이 ..) 나는 미쳐 가고 있니? – FirstOne

+0

왜 5 개의 매개 변수가 필요합니까? 4 개의 placeholder ('?'), 4 개의 글자 ('issi')와 4 개의 변수 ('$ id','$ u','$ p','$ var')가 있습니다. – FirstOne