如何使用 Advantage PHP Extension 获取行数?

Posted

技术标签:

【中文标题】如何使用 Advantage PHP Extension 获取行数?【英文标题】:How to get number of rows with Advantage PHP Extension? 【发布时间】:2011-10-20 03:19:56 【问题描述】:

如何使用 Advantage Database php Extension 从 SELECT 语句结果集中获取行数?

【问题讨论】:

【参考方案1】:

我最终编写了自己的函数,其工作原理类似于 mysql_num_rows:

function my_num_rows($result) 
    ob_start(); // begin disable output from ads_result_all
    (int)$number = ads_result_all($result);
    ob_end_clean(); //close and clean the output buffer
    ads_fetch_row($r1, 0); // reset the result set pointer to the beginning
    if ($number >= 0)
         return $number;
     else 
         return FALSE;
    

也可以重写它以使用 ads_fetch_row 计算行数,但这对于我需要的东西来说更容易。如果结果集较大,使用 ads_result_all 可能会降低性能。

【讨论】:

【参考方案2】:

您必须在获取行数时对其进行计数。 (您可以查看此 KB 项目 070618-1888)或者您可以使用 COUNT() 标量执行第二个查询(如果可能,建议排除 order by)

这是一个边走边算的例子:

$rStmt = ads_do ($rConn, "select id, name from table1");
$RowCount = 0;
while (ads_fetch_row($rStmt))

   $id = ads_result ($rStmt, "id");
   $name = ads_result($rStmt, "name");
   echo $id . "\t" . $name . "\n";
   $RowCount++;

echo "RowCount:" . $RowCount . "\n";

【讨论】:

感谢您的回复。我尝试这样做,但我遇到的问题是,在计算行数后,结果指针最终位于结果集的末尾,需要重置。我最终使用了我在答案中发布的方法。【参考方案3】:

据我所知,在第 12 版中,您有函数 ads_num_rows()。请参阅官方文档以了解更多用法。

【讨论】:

以上是关于如何使用 Advantage PHP Extension 获取行数?的主要内容,如果未能解决你的问题,请参考以下文章

Advantage 和 PHP - 错误 6303:超过最大 Advantage 数据库服务器连接数

PHP PDO 连接到 Advantage 数据库 SQL Server

apache_conf 删除文件扩展名,在末尾添加尾部斜杠(http://alexcican.com/post/how-to-remove-php-html-htm-extensions-with-h

如何在选择查询中使用变量表名(Advantage Data Architect)

如何防止 Advantage Database 连接超时?

如何使用 Java 8 连接到 Sybase Advantage Local DB