[英]How to get number of affected rows from a mssql query in php pdo
我正在将我的php项目从使用mysql更改为mssql。 当我使用if ($query->rowCount() == 0) {
与mysql它运行良好,但与mssql我得到一个负值,这是不正确的。 所以我试着使用$count = count($query->fetchAll());
使用mssql,它给我一个类似于使用mysql时的正值,但我得到一个错误我正在使用PHP服务器的SQL驱动程序
致命错误:未捕获PDOException:SQLSTATE [IMSSP]:活动结果集中没有其他行。 由于此结果集不可滚动,因此无法检索更多数据。
需要一些帮助来解决这个问题
文档清楚地说明了PDOStatement :: rowCount 。
返回添加,删除或更改的行数。 如果关联的PDOStatement执行的最后一个SQL语句是SELECT语句,则PDO :: CURSOR_FWDONLY游标返回-1。 PDO :: CURSOR_SCROLL ABLE游标返回结果集中的行数。
如果要对SELECT
语句使用rowCount()
,则需要使用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->fetchAll());
$query->fetchAll()
调用后,您的结果集已经被提取。 如果您尝试调用PDOStatement::fetch
或PDOStatement::fetchAll
方法,则会出现此错误。
尝试下一种方法:
<?php
...
$result = $query->fetchAll();
$count = count($result);
foreach ($result as $row) {
}
...
?>
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.