Как узнать количество строк из PDO Подготовить заявление? - PullRequest
2 голосов
/ 23 января 2012

У меня есть этот запрос:

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 ]

1 голос
/ 23 января 2012

Самый простой способ, учитывая ваш текущий код:

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

Так как Fetchall в вашем запросе возвращает ВСЕ соответствующие записи в массиве по одной строке на запись или ноль, если найдено 0 записей, если количество равно 0, просто - нет пользователя. Если число больше 0, найден хотя бы один пользователь.

0 голосов
/ 23 января 2012

Вы можете привязать столбец результата к переменной $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
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...