2011-11-11 6 views
1

이 코드는 db 테이블에 제공된 전자 메일 주소가 없어도 매번 1을 반환합니다. 당신이 bind_result 바로 뒤에 die ($ count)를 놓습니다. 매번 1을 반환합니다. 내 코드에서 잘못된 점을 알았습니까?MYSQL db가 잘못된 수를 반환합니다.

$stmt = $db->prepare("SELECT COUNT(id) FROM `users` WHERE `email`=? LIMIT 1") or die($db->error); 
    $stmt->bind_param("s", $email) or die ($stmt->error); 
    $stmt->execute() or die ($stmt->error); 
    $count=$stmt->bind_result($count) or die ($stmt->error); 
      die($count); 
      $stmt->close(); 
    return ($count > 0 ? true : false); 
+0

PHP 사용자는 아니지만 쿼리가 오류없이 실행 된 것을 의미하는 것으로 보입니다. 아마도 행 수나 결과를 반환하는 또 다른 PHP 메소드가있을 것입니다. –

답변

2

당신은 바운드 변수 $ 수에 쿼리의 결과를 넣어 $stmt->fetch()를 호출하지 않았다.

따라서 $ count 값은 항상 true (1) 또는 false (0) 인 $stmt->bind_result()의 반환 값으로 설정됩니다.

는 결과를 저장하는 어떤 PHP 변수 명령문을 알려 bind_result()를 사용 http://php.net/manual/en/mysqli-stmt.bind-result.php에서 예를 참조하지만 fetch()에 대한 별도의 호출로 쿼리의 결과를 가져해야합니다.


댓글 : 이 기능 중 귀하의 카운트 결과가 반환되지 않습니다.

함수는 성공시 TRUE를, 실패하면 FALSE를 반환합니다. 쿼리의 결과를 반환하지 않습니다. 그래서 변수를 바인드하는 것이므로 반입은 결과 값을 반환 값이 아닌 부작용으로 저장할 수 있습니다. $count=*anything*을 지정하면 안됩니다.

여기에 코드가 보일 것입니다 방법은 다음과 같습니다

$stmt = $db->prepare("SELECT COUNT(id) FROM `users` WHERE `email`=? LIMIT 1") 
    or die($db->error); 
$stmt->bind_param("s", $email) 
    or die ($stmt->error); 
$stmt->execute() 
    or die ($stmt->error); 
$stmt->bind_result($count) // do not use return value 
    or die ($stmt->error); 
$stmt->fetch() // do not use return value 
    or die ($stmt->error); 
print ($count); 
$stmt->close() 
    or die ($stmt->error); 
return ($count > 0 ? true : false); 
+0

대신 $ count = $ stmt-> fetch()를 사용했습니다. 같은 결과 –

+0

오케이. 노력하고 ... –

+1

thx. 그것은 나를 위해 일했다. 내 질문에 90k 사용자의 답변을 보는 것은 대단합니다. –

1

bind_result는 결과 저장을위한 준비된 문장에 변수를 결합하고, 성공할 경우 TRUE를, 실패 할 경우 FALSE를 반환합니다.

$stmt->bind_result($count); 
$stmt->fetch(); 
$stmt->close(); 
return ($count > 0 ? true : false); // return $count > 0; would be ok. 
관련 문제