PDO :: rowCount()返回-1

时间:2014-12-08 17:23:59

标签: php pdo sqlsrv

我在下面有这个功能。我曾经在 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');
    }

}

2 个答案:

答案 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语句。