我在下面有这个功能。我曾经在 MySQL DB上运行。我不得不转移到 SQL Server 2008 ,这很简单。
但是,在那之后,rowCount()
不断返回-1
,我以前从来没有这样做过。我确定我的SQL查询正在返回结果,因为如果我在返回时print_r()
var执行$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');
}
}
答案 0 :(得分:1)
得到了它们。
prepare()
语句应该再接收一个参数。 array(PDO::ATTR_CURSOR => PDO::CURSOR_SCROLL)
。
$ stmt = $ this-&gt; pdo-&gt; prepare($ sql,array(PDO :: ATTR_CURSOR =&gt; PDO :: CURSOR_SCROLL));
之后rowCount()
应该可以正常工作。
感谢@Rasclatt的答案。
答案 1 :(得分:0)
我认为你可能会遇到PDO rowCount()
函数的问题。正如PHP手册中所述。第二句话是......:
&#34;如果关联的PDOStatement执行的最后一条SQL语句是SELECT语句,则某些数据库可能会返回该语句返回的行数。但是,并不保证所有数据库都有这种行为,不应依赖于便携式应用程序。&#34;
相反,您应该使用COUNT(*)
sql语句。