2012-01-23 49 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在你的查詢將返回所有匹配的記錄在每個記錄或空一行的數組,如果找到0個記錄,如果計數爲0,則容易 - 無用戶。如果計數大於0,則至少找到一個用戶。

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()假(否行) :

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 
}