2012-02-22 3 views
4

클래스에이 함수 또는 메서드가 있지만 전자 메일을 삽입 할 때 행 수를 반환하지 않습니다. 나는 mysql 연결 등을 테스트했다. 모두 작동하고있다. 또한 메서드를 통과하는 전자 메일이 이미 데이터베이스에 있음을 유의하십시오. 내 계획은 행의 수를 얻는 것이고, 0보다 크다면 이미이 이메일을 데이터베이스에 가지고 있다는 뜻입니다.전자 메일이 데이터베이스에 있는지 확인하고 있습니까?

public function userExist($email) { 
    $query = "SELECT email FROM " . USER_TABLE . " WHERE email = ?"; 

    $stmt = $this->_db->prepare($query); 

    $stmt->bind_param("s", $email); 

    if ($stmt->execute()) { 
     $stmt->store_result(); 
     return $stmt->num_rows; 
    } 
     return false; 


} 
+1

(당신은 당신의 코드를 변경할 필요가 없습니다 것입니다, 그래서 나는이 너무 오래 당신이 쿼리를 실행 한 후 $stmt->VAR_NAME처럼 참조로 무엇이든 될 수있다. NUM_ROWS을 사용) 항상'$ email'와 같으면'이메일 선택 '할 필요가 없습니다. 'SELECT COUNT (*)'를 더 잘 수행하십시오. – zerkms

+0

* 모든 것이 잘 될 것 같습니다. 'display_errors'가 true로 설정 되었습니까? 아니면 오류가 기록 되었습니까? – Josh

+0

나는 디버깅의 OOP 방식에 익숙하지 않고 그것이 내 주요 문제이며, 나는 OOP 방식을 프로그래밍함으로써 좌절감을 느낀다. 이클립스를 사용하여 코딩 작업을 훨씬 쉽게 처리 할 수 ​​있지만 디버깅 방법을 알아야합니다. PHP를위한 훌륭한 디버깅 툴이나 소스를 알고 있습니까? –

답변

1
public function userExist($email) { 
$query = "SELECT COUNT(*) AS num_rows FROM " . USER_TABLE . " WHERE email = ?"; 

$stmt = $this->_db->prepare($query); 

$stmt->bind_param("s", $email); 

if ($stmt->execute()) { 
    $stmt->store_result(); 
    return $stmt->num_rows; 
} 
    return false; 


} 

은 예고 SELECT COUNT(*) AS num_rows

2

내가 mysqli와 PDO를 사용하는 방법을 알고,하지만 당신이 원하는 것은 결과를 가져 항목이 MySQL의 EXISTS 기능을 사용하여 존재하는지 확인하고보다하지 않는 (인에 allways 1 또는 0). 위의 쿼리에서

SELECT EXISTS(SELECT 1 FROM ".USER_TABLE." WHERE email = ?) as email_exists 

, email_exists 이메일이 이미 테이블에인지 아닌지 어떠했는지에 따라 1 또는 0이 될 것입니다. PDO

나는 이런 식으로 할 것 :

$sth = $dbh->prepare("SELECT EXISTS(SELECT 1 FROM ".USER_TABLE." WHERE email = :email)"); 
$sth->execute(array('email' => $email)); 
return $sth->fetchColumn(); 

나는 당신이 당신의 자신의 클래스와 그것을 자신을 수행하는 방법을 알아낼 드리겠습니다. 당신이 가고있다

+0

해킹 해 주셔서 고맙습니다.하지만 알고 싶습니다. mysqli num 행을 반환하지 않는 이유는 무엇입니까? –

관련 문제