Документация про PDOStatement :: rowCount ясна.
Возвращает количество строк, добавленных, удаленных или измененных. Если последний SQL
оператор, выполненный связанным PDOStatement, был SELECT
оператор, курсор PDO :: CURSOR_FWDONLY возвращает -1.
Курсор PDO :: CURSOR_SCROLL ABLE возвращает количество строк в
набор результатов.
Если вы хотите использовать rowCount()
для SELECT
операторов, вам нужно использовать PDO::CURSOR_SCROLLABLE
:
<?php
#
$server = "server\instance,port";
$dbname = "database";
$uid = "uid";
$pwd = "pwd";
# Connection
$conn = new PDO("sqlsrv:server=$server ; Database = $dbname", $uid, $pwd);
# SELECT statement
$query = "SELECT * FROM Table1";
$stmt = $conn->prepare($query, array(PDO::ATTR_CURSOR => PDO::CURSOR_SCROLL));
$stmt->execute();
echo $stmt->rowCount();
# End
$stmt = null;
$conn = null;
?>
Когда вы используете $count = count($query->fetchAll());
, ваш набор результатов уже получен после $query->fetchAll()
вызова. Если вы попытаетесь вызвать методы PDOStatement::fetch
или PDOStatement::fetchAll
, вы получите эту ошибку.
Попробуйте следующий подход:
<?php
...
$result = $query->fetchAll();
$count = count($result);
foreach ($result as $row) {
}
...
?>