繁体   English   中英

PDO dblib nextRowset无法正常工作

[英]PDO dblib nextRowset not working

我正在将PHP应用程序从在Windows环境中运行转换为基于Linux的环境。

它利用PDO针对Microsoft SQL Server数据库运行存储过程。

所以,我已经安装并配置了PHP 5.6.22,Apache,freetds和pdo dblib以方便应用程序。

大多数存储过程执行都很完美。 除了返回多个行集的那些。

当我调用$pdo->nextRowset() ,我得到了这个致命的错误:

SQLSTATE[HY000]: General error: PDO_DBLIB: dbresults() returned FAIL

我能找到的唯一参考是PHP 5.6.9中报告的错误已修复。

但是,我在PHP 5.6.22中遇到了同样的问题。

有没有人有任何想法为什么会发生这种情况以及我如何解决它?

您是使用PDO::fetch还是PDO::fetchAll获取数据? 因为如果你使用“fetch”方法并且没有到达行的末尾PDO::nextRowset()将失败(我不知道为什么,它只是发生在我身上)。

因此,对于我来说, 强制扫描所有行 直到PDO::fetch返回false ,然后PDO::nextRowset()将正常执行。

这意味着如果行集中只有一行,则必须至少调用两次PDO::fetch (1表示检索数据,1表示返回false),然后传递给下一行集。

我与PDO::nextRowset()有同样的问题,因为它返回true,即使没有更多的行集可用,因此在调用fetchAll() ,它会引发异常HY000

你可以通过在获取rowset之前用方法PDO::columnCount()检查列数来遵循一个简单的技巧。 如果它不为零,则您有一个有效的行集,因此您可以调用PDO::fetchAll()

即使PDO::nextRowset()报告为true, columnCount()也会在移动到下一个rowset之前报告列数。

while ($pdo->columnCount()) {
    $data[] = $pdo->fetchAll(PDO::FETCH_ASSOC); //or, $pdo->fetchAll() 
    $pdo->nextRowset();
}

此外,建议在try块中进行所有PDO操作,否则可能会出现未处理的异常。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM