Получить количество строк с pdo
У меня есть простой подготовленный pdo запрос:
$result = $db->prepare("select id, course from coursescompleted where person=:p");
$result ->bindParam(':p', $q, PDO::PARAM_INT);
$result->execute();
$rows = $result->fetch(PDO::FETCH_NUM);
echo $rows[0];
Кажется, что эхо возвращает идентификационное значение записи, а не количество записей, возвращаемых запросом?
любая идея или объяснение для этого?
Ответы
Ответ 1
PDO:: FETCH_NUM: возвращает массив, индексированный по номеру столбца, возвращенный в вашем результирующем наборе, начиная с столбец 0
Вы не собираете счетчик строк вообще.
SELECT COUNT(*) FROM coursescompleted where person=:p
Этот запрос будет возвращать полные строки в $rows[0];
EDIT:
Пожалуйста, см. Ответ @ray. использование count(id)
лучше, чем count(*)
для InnoDB.
Вы можете получить количество строк следующим образом, начиная с вашего предыдущего запроса.
$row_count = $result->rowCount();
Но будьте осторожны:
Если последний оператор SQL, выполняемый соответствующим PDOStatement, был оператор SELECT, некоторые базы данных могут возвращать количество строк возвращенный этим утверждением. Однако это поведение не гарантируется для всех баз данных и не следует полагаться на переносные приложения.
Документация
Ответ 2
Вы выполнили запрос, который возвращает строки из базы данных, вытащил первую строку из результата в переменную и затем выделил первый столбец этой строки.
Если вы хотите подсчитать, сделайте SQL count()
$result = $db->prepare("select count(*) from coursescompleted where person=:p");
$result->bindParam(':p', $q, PDO::PARAM_INT);
$result->execute();
$rowCount = $result->fetchColumn(0);
echo $rowCount;
Ответ 3
Предполагая, что id
используется для первичного ключа:
SELECT COUNT(id) FROM coursescompleted WHERE person=:p;
Избегайте счета (*). Если ваш движок хранения - InnoDB (возможно, другие, кроме MyIsam), вы получите удар производительности.
Ответ 4
Попробуйте echo count($rows);
как $rows
- массив.
Edit:
Чтобы использовать результаты
$rows = $result->fetchAll(/* nothing here */);
if(count($rows) > 0) {
// Show results, perhaps using a foreach($rows as $row)
} else {
echo "Sorry, no results found";
}
Ответ 5
Вы можете использовать этот
<?php
$result = $db->prepare("select id, course from coursescompleted where person=:p");
$result ->bindParam(':p', $q, PDO::PARAM_INT);
$result->execute();
$rows = $result->rowCount();
echo $rows;
?>
Это иногда не работает в запросах SELECT
. Но, основываясь на личном опыте, и поскольку вы не упомянули о переносе его в другие системы баз данных, он должен работать на MySQL.
Дополнительная информация находится в руководстве по PHP здесь