php – 如果在获取循环内发出另一个查询,PDO dblib over freetds将重置sql server 2000上的查询获取

发布时间:2022-04-30 发布网站:脚本宝典
脚本宝典收集整理的这篇文章主要介绍了php – 如果在获取循环内发出另一个查询,PDO dblib over freetds将重置sql server 2000上的查询获取脚本宝典觉得挺不错的,现在分享给大家,也给大家做个参考。
好的,所以我们有了一台新的服务器

> Debian Wheezy 32BIT
> PHP 5.5.18
> FreeTDS 0.91

这个程序需要与旧的sql Server 2000服务器通信.我们使用了以前服务器中的旧代码(PHP 5.2和更旧的FreeTDS – 无法获得该版本).
我们使用dblib驱动程序通过PDO连接到sql Server 2000.

我们在使用fetch函数时会遇到奇怪的行为.基本上,如果我们在同一个pdo连接对象的fetch循环期间发出查询,则主查询将被重置,即使仍有要提取的记录,下一个fetch调用也将返回false.

// PSEUDO CODE
// Here the main query
$q = $sql7->query("SELECT TOP 5 * From News ORDER BY Data Desc");
while ($row = $q->fetch(PDO::FETCH_ASSOC)) {
    // Looping through the results
    echo "<h1>;main query</h1>";
    PRint_r($row);

    // Issue a query on the same pdo connection
    $subq = $sql7->query("SELECT TOP 1 * From News WHERE IDNews = " . $row['IDNews'] . " ");
    while ($subresult = $subq->fetch(PDO::FETCH_ASSOC)) {
        echo "<h1>Inner query</h1>";
        print_r($subResult);
    }

    // Here the main query $q->fetch(PDO::FETCH_ASSOC) will answer false on the next iteration
    // if we remove the subq,the main query loops just fine
    echo "<hr>";
}

使用pdo_sqlserver驱动程序的Windows PHP上的相同代码工作得很好.

我们作为fetch函数的参数传递的fetch类型无关紧要.

PHP不会抛出任何警告或错误.

我真的不知道这里发生了什么.

截至: reference (PHP BUG SITE)

因此,似乎以前版本的PHP(5.3和之前版本)不符合TDS行为.我们需要重构代码.

脚本宝典总结

以上是脚本宝典为你收集整理的php – 如果在获取循环内发出另一个查询,PDO dblib over freetds将重置sql server 2000上的查询获取全部内容,希望文章能够帮你解决php – 如果在获取循环内发出另一个查询,PDO dblib over freetds将重置sql server 2000上的查询获取所遇到的问题。

如果觉得脚本宝典网站内容还不错,欢迎将脚本宝典推荐好友。

本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
如您有任何意见或建议可联系处理。小编QQ:384754419,请注明来意。