PDO :: rowCount (), возвращающий -1

У меня есть эта функция ниже. что я использовал для работы в базе данных MySQL . Мне пришлось переходить на SQL Server 2008 , просто.

Но после этого rowCount() продолжает возвращать -1 , я никогда раньше этого не делал. Я уверен, что мой SQL-запрос возвращает результаты, потому что если я сделаю print_r() в моем возвращении ( $rows var), все будет напечатано.

Итак, если у кого-то была эта проблема, пожалуйста, помогите мне разобраться в этом.

Извините за любую грамматическую ошибку.

 public function listar(){ $retorno = array(); $sql = "SELECT m.id, m.descricao, m.link, m.categoria, m.icone FROM menus AS m, grupos AS g, permissoes AS p WHERE (g.id = p.idgrupo AND m.id = p.idmenu) AND (p.status = :pstatus AND g.status = :gstatus AND m.status = :mstatus) AND g.id = :gid ORDER BY m.ordem ;"; $vars = array(":pstatus"=>1,":gstatus"=>1,":mstatus"=>1,":gid"=>$_SESSION['group']); $stmt = $this->pdo->prepare($sql); foreach($vars as $index => $value){ $stmt->bindValue($index,$value); } if($stmt->execute()){ $count = $stmt->rowCount(); $rows = $stmt->fetchAll(PDO::FETCH_OBJ); $rows['msg'] = '1'; $rows['length'] = $count; $i = 0; while($i < $count){ foreach($rows[$i] as $index => $value){ $rows[$i]->$index = utf8_encode($value); } $i++; } return $rows; } else { return array("msg" => '0'); } } 

Получил это ребята.

Оператор prepare() должен получить еще один параметр. array(PDO::ATTR_CURSOR => PDO::CURSOR_SCROLL) .

$ stmt = $ this-> pdo-> prepare ($ sql, array (PDO :: ATTR_CURSOR => PDO :: CURSOR_SCROLL));

После этого rowCount() должен работать нормально.

Спасибо за ответ @Rasclatt.

Я думаю, что вы можете rowCount() функции PDO rowCount() . Как указано в руководстве по PHP. Второе предложение – это получение …:

«Если последний оператор SQL, выполняемый связанным с ним PDOStatement, был оператором SELECT, некоторые базы данных могут возвращать количество строк, возвращаемых этим оператором. Однако это поведение не гарантируется для всех баз данных и не должно полагаться на переносные приложения».

Вместо этого вы должны использовать инструкцию COUNT(*) sql.