在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;
}
}
?>
答案 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也不安全!了解prepared的PDO语句。
答案 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
。