У меня есть эта функция ниже. что я бегал на 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');
}
}
Понял, ребята.
prepare()
оператор должен получить еще один параметр. array(PDO::ATTR_CURSOR => PDO::CURSOR_SCROLL)
,
$ stmt = $ this-> pdo-> prepare ($ sql, массив (PDO :: ATTR_CURSOR => PDO :: CURSOR_SCROLL));
После этого rowCount()
должно работать нормально.
Спасибо за ответ @Rasclatt.
Я думаю, что вы можете столкнуться с Гочей на PDO rowCount()
функция. Как указано в руководстве по PHP. Второе предложение — это ошибка …:
«Если последним оператором SQL, выполненным связанным PDOStatement, был оператор SELECT, некоторые базы данных могут возвращать количество строк, возвращаемых этим оператором. Однако такое поведение не гарантируется для всех баз данных и не должно зависеть от переносимых приложений».
Вместо этого вы должны использовать COUNT(*)
SQL заявление.