PHP SQLSRV PDO结果数

时间:2017-08-24 13:09:02

标签: php pdo sqlsrv

在PHP SQLSRV PDO连接中返回结果数时遇到问题,当我尝试$ stmt-> rowCount();获得-1结果,真的不明白。

...
...
...
if(empty($region)){
    $query2 = "SELECT [QuotID], [QuotNumber], CreationDate, QuotDate
    FROM [dbo].[vQuotaion]
    GROUP BY [QuotID]
        ,[QuotNumber]
        ,[CreationDate]
        ,[QuotDate]
    HAVING CreationDate >='".$fdate."' AND CreationDate <='".$edate."' AND  ProType = 'OPSFi' ORDER BY CreationDate DESC";
    $stmt2 = $conn->query( $query2 );           
} else {
    ...
    ...
    ...
}
...
...
...
<?php
if(empty($stmt2)){
    echo '';
    }else{
        while ($result = $stmt2->fetch(PDO::FETCH_ASSOC)){
        bla bla bla;
    }
}
?>

2 个答案:

答案 0 :(得分:2)

如果要在没有单独查询的情况下计算行数,可以使用PDO执行此操作:

$rows = $stmt2->fetchAll();
$num_rows = count($rows);

对所有数据库驱动程序 使用带有PDO SELECT语句时,无法直接计算行数。如果需要定期检索计数,可以使用上面的代码创建一个函数。

警告!

Little Bobby your script is at risk for SQL Injection Attacks. 。即使escaping the string也不安全!了解preparedPDO语句。

答案 1 :(得分:0)

您可以使用sqlsrv驱动程序的PDO版本获取select查询的行数,但是,与标准版本的驱动程序(非PDO)一样,您必须指定可滚动游标。像这样:

$query = "SELECT * FROM myTable";
$stmt = $conn->prepare($query, array(PDO::ATTR_CURSOR => PDO::CURSOR_SCROLL));
$stmt->execute();
$rows = $stmt->rowCount();

使用的默认光标是PDO::CURSOR_FWDONLY,当使用rowCount()时,返回-1

Microsoft documentation