【问题标题】:How to get number of affected rows from a mssql query in php pdo如何从 php pdo 中的 mssql 查询中获取受影响的行数
【发布时间】:2019-03-14 12:42:53
【问题描述】:

我正在将我的 php 项目从使用 mysql 更改为 mssql。 当我使用 if ($query->rowCount() == 0) { 使用 mysql 它运行良好,但使用 mssql 我得到一个不正确的负值。 所以我尝试将$count = count($query->fetchAll()); 与 mssql 一起使用,这给了我一个类似于使用 mysql 时的正值,但我得到一个错误 我正在使用Php drivers for sql server

致命错误:未捕获的 PDOException:SQLSTATE[IMSSP]:活动结果集中没有更多行。由于此结果集不可滚动,因此无法检索更多数据。

在这个问题上需要一些帮助

【问题讨论】:

  • 为什么要标记 MySQL 和 SQL Server?您真正使用的是哪个 RDBMS?
  • 您使用哪个驱动程序连接到 MS SQL Server?
  • @Zhorov 为 sql server 使用 php 驱动程序
  • @Larnu 很抱歉,我两个都用。我只是想从 mysql 更改为 mssql

标签: php sql-server pdo sqlsrv


【解决方案1】:

文档很清楚PDOStatement::rowCount

返回添加、删除或更改的行数。如果最后一个 SQL 相关 PDOStatement 执行的语句是 SELECT 语句,PDO::CURSOR_FWDONLY 游标返回 -1。一种 PDO::CURSOR_SCROLL ABLE 游标返回的行数 结果集。

如果要将rowCount()用于SELECT语句,则需要使用PDO::CURSOR_SCROLLABLE

<?php  
#
$server = "server\instance,port";  
$dbname = "database";
$uid = "uid";  
$pwd = "pwd";  

# Connection
$conn = new PDO("sqlsrv:server=$server ; Database = $dbname", $uid, $pwd);  

# SELECT statement
$query = "SELECT * FROM Table1";  
$stmt = $conn->prepare($query, array(PDO::ATTR_CURSOR => PDO::CURSOR_SCROLL));  
$stmt->execute();  
echo $stmt->rowCount();  

# End
$stmt = null;
$conn = null;
?>   

当您使用$count = count($query-&gt;fetchAll()); 时,您的结果集已经在$query-&gt;fetchAll() 调用之后获取。如果你尝试调用PDOStatement::fetchPDOStatement::fetchAll 方法,你会得到这个错误。

尝试下一种方法:

<?php

...
$result = $query->fetchAll(); 
$count = count($result);
foreach ($result as $row) {

}
...

?>

【讨论】:

    猜你喜欢
    • 2018-05-13
    • 2013-02-16
    • 2018-06-10
    • 2010-11-08
    • 2014-10-01
    • 2010-09-23
    • 1970-01-01
    • 2019-05-23
    相关资源
    最近更新 更多