У меня есть эта функция ниже. что я использовал для работы в базе данных 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.