如何从PDO准备语句中获取行数?

时间:2012-01-23 00:08:15

标签: php pdo prepared-statement rows

我有这个问题:

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是一个未知函数。

有关如何获取行数并测试是否返回行的任何想法?

由于

2 个答案:

答案 0 :(得分:1)

根据您当前的代码,最简单的方法是:

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

由于查询中的Fetchall返回每条记录一行数组中的所有匹配记录,如果找到0条记录则返回null,如果计数为0,则很容易 - 没有用户。如果计数大于0,则至少找到一个用户。

答案 1 :(得分: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
}