Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/loops/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 如何从PDO Prepare语句中获取行数?_Php_Pdo_Prepared Statement_Rows - Fatal编程技术网

Php 如何从PDO Prepare语句中获取行数?

Php 如何从PDO Prepare语句中获取行数?,php,pdo,prepared-statement,rows,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(PD

我有一个疑问:

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()
但是我得到一个错误,它说
行数
是一个未知函数

关于如何获取行数并测试是否返回行,您有什么想法吗


谢谢

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

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

由于查询中的Fetchall以每记录一行的数组返回所有匹配的记录,如果找到0条记录,则返回null,如果计数为0,则返回easy--无用户。如果计数大于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
}