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

У меня есть эта функция ниже. что я бегал на MySQL DB. Я должен был перейти к SQL Server 2008, легкая вещь

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

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

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

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');
}

}

2

Решение

Понял, ребята.

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

$ stmt = $ this-> pdo-> prepare ($ sql, массив (PDO :: ATTR_CURSOR => PDO :: CURSOR_SCROLL));

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

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

1

Другие решения

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

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

Вместо этого вы должны использовать COUNT(*) SQL заявление.

0

По вопросам рекламы [email protected]