2012-01-23 4 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); 

0のレコードが見つかった場合は、クエリではfetchAllがレコードまたはnullごとに1行の配列内のすべての一致するレコードを返すので、カウントが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 
    } 
} 

おそらく(なし行)PDOStatement::fetch() falseを返すかどうかを確認するために容易になるだろうが、 :

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 
} 
関連する問題