我有这个查询:
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
是一个未知函数。
关于如何获取行数并测试是否返回了行,有什么想法吗?
感谢
给定当前代码,最简单的方法是:
$insertUser = $data->checkUser("1234567890");
$count = sizeof($insertUser);
由于查询中的Fetchall返回每个记录一行的数组中的所有匹配记录,如果找到0条记录,则返回null,如果计数为0,则很容易--没有用户。如果计数大于0,则至少找到一个用户。
您可以将结果列绑定到$user
变量,然后使用fetch检查是否返回一行:
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
}