2012-01-23 2 views
2

나는이 쿼리가 :PDO Prepare Statement에서 행 수를 얻는 방법?

public function checkUser($phone) 
{ 
    $sql = "SELECT name FROM users WHERE phone=:phone"; 
    $stmt = db::getInstance()->prepare($sql); 
    $stmt->bindParam(':phone', $phone); 
    $stmt->execute(); 
    $user = $stmt->fetchAll(PDO::FETCH_OBJ); 

    return $user; 
} 

을 그리고 다음과 같이 호출 : 쿼리는 사용자를 반환 아닌지

$insertUser = $data->checkUser("1234567890"); 
print_r($insertUser); 

내가 알아야 할 것은. fetchAll()으로 전화 할 때 array()이 나오지만 결과가 반환되어야합니다.

$user = $stmt->rowCount();을 사용해 보았지만 rowCount은 알 수없는 기능입니다.

행 수를 얻는 방법과 행 반환 여부에 대한 아이디어가 있습니까?

감사

답변

1

가장 쉬운 방법은 주어진 현재의 코드는 다음과 같습니다

$insertUser = $data->checkUser("1234567890"); 
$count = sizeof($insertUser); 

쿼리에 Fetchall 때문에 모든 일치 반환 기록 레코드 또는 널 (null) 당 하나의 행의 배열에 0 레코드를 발견하는 경우, 카운트가 0이면 쉽게 - 사용자 없음. 카운트가 0보다 큰 경우, 적어도 1 명의 사용자가 발견됩니다.

0

당신은 행이 반환되는 경우 확인하기 위해 가져 오기 사용 후 $user 변수에 결과 열을 결합하고 수 :

public function checkUser($phone) 
{ 
    $sql = "SELECT name FROM users WHERE phone=:phone"; 
    $stmt = db::getInstance()->prepare($sql); 
    $stmt->bindParam(':phone', $phone); 
    $stmt->bindColumn('name', $name); 
    $stmt->execute(); 
    if($stmt->fetch(PDO::FETCH_BOUND)) { 
     return $name; 
    } else { 
     return null; //No user found 
    } 
} 

는 아마 확인하는 것이 더 쉽습니다 있지만 경우는 false PDOStatement::fetch() 돌아갑니다 (아무 행) :

public function checkUser($phone) { 
    $stmt = db::getInstance()->prepare("SELECT name FROM users WHERE phone=:phone"); 
    $stmt->execute(array(':phone' => $phone)); 
    $user = $stmt->fetch(PDO::FETCH_ASSOC); 

    return $user !== false; //Returns true if a row is returned, false otherwise 
} 
관련 문제