我正在将我的php项目从使用mysql更改为mssql。当我使用if ($query->rowCount() == 0) {
与mysql它运作良好,但与mssql我得到一个负值,这是不正确的。所以我试图使用$count = count($query->fetchAll());
与mssql,这给我一个类似于使用mysql时的正值,但我得到一个错误,我使用Php drivers for sql server
致命错误:未捕获PDOException:SQLSTATE [IMSSP]:活动结果集中没有其他行。由于此结果集不可滚动,因此无法检索更多数据。
需要一些帮助来解决这个问题
关于PDOStatement::rowCount的文件很清楚。
返回添加,删除或更改的行数。如果关联的PDOStatement执行的最后一个SQL语句是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->fetchAll());
时,你的结果集已在$query->fetchAll()
调用后获取。如果您尝试调用PDOStatement::fetch
或PDOStatement::fetchAll
方法,您将收到此错误。
尝试下一个方法:
<?php
...
$result = $query->fetchAll();
$count = count($result);
foreach ($result as $row) {
}
...
?>