получить количество строк с 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];
Эхо, похоже, возвращает значение ID записи, а не количество записей, возвращаемых запросом?
любая идея или объяснение этому?
5 ответов
PDO:: FETCH_NUM: возвращает массив, индексированный по номеру столбца, как вернулся в результирующий набор, начиная со столбца 0
вы вообще не получаете счет строк.
SELECT COUNT(*) FROM coursescompleted where person=:p
этот запрос вернет всего строк в $rows[0];
EDIT:
Пожалуйста, см. @Рэя ответа. используя count(id)
лучше, чем count(*)
для InnoDB.
вы смогли получить строк-отсчет в следующем образе, от вашего ранее запроса.
$row_count = $result->rowCount();
но предупреждаю:
если последний оператор SQL, выполненный связанным PDOStatement был инструкция SELECT, некоторые базы данных могут возвращать количество строк возвращено этим заявлением. Однако такое поведение не гарантируется для всех баз данных и не следует полагаться на портативный приложения.
вы выполнили запрос, который возвращает строки из базы данных, извлекли первую строку из результата в переменную, а затем повторили первый столбец этой строки.
Если вы хотите считать, сделайте 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;
предполагая, что id
использование первичного ключа:
SELECT COUNT(id) FROM coursescompleted WHERE person=:p;
избежать граф(*). Если ваш движок хранения InnoDB (возможно, другие, кроме MyIsam), вы получите удар по производительности.
попробовать echo count($rows);
as $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";
}
Вы можете использовать этот
<?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 здесь