我正在将我的php项目从使用mysql更改为mssql。
当我使用
if ($query->rowCount() == 0) {
在mysql上运行良好,但在mssql上却得到了一个不正确的负值。
所以我试图将$count = count($query->fetchAll());
与mssql一起使用,这给了我一个正值,类似于使用mysql时,但是我得到了一个错误
我正在使用Php drivers for sql server
致命错误:未捕获的PDOException:SQLSTATE [IMSSP]:活动结果集中没有更多行。由于此结果集不可滚动,因此无法检索到更多数据。
在此问题上需要一些帮助
答案 0 :(得分:0)
有关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->fetchAll());
时,您的结果集已在$query->fetchAll()
调用后获取。如果尝试调用PDOStatement::fetch
或PDOStatement::fetchAll
方法,则会收到此错误。
尝试下一种方法:
<?php
...
$result = $query->fetchAll();
$count = count($result);
foreach ($result as $row) {
}
...
?>