【问题标题】:How to Get The Count or The Number Of Rows In A Result Set In PHP using ODBC Connection?如何使用 ODBC 连接在 PHP 中获取结果集中的计数或行数?
【发布时间】:2011-05-06 06:21:38
【问题描述】:

当我在我的 PHP Web 应用程序中构建网页时,我的连接工作正常,但是当我想获取查询中使用的 SELECT 语句的行数时,它给了我 -1 !!虽然我的结果集大约有 10 行。

我想获取结果集行的实际数量。 我搜索了 PHP 手册和文档,但没有找到像 Count 函数或类似的直接方法。

我想知道我是否必须在另一个查询中创建一个 Count(*) SQL 语句并将其附加到我的连接以获取行数?

有人知道一种简单直接的方法吗?

odbc_num_rows 函数的结果总是 -1,所以我无法得到实际的行数。

我的编程语言是 PHP,我的数据库引擎是 Sybase,连接数据库的方式是 ODBC。

这是我使用的代码:-

<?PHP

//PHP Code to connect to a certain database using ODBC and getting information from it

//Determining The Database Connection Parameters
$database = 'DatabaseName';
$username = 'UserName';
$password = 'Password';

//Opening the Connection
$conn = odbc_connect($database,$username,$password);

//Checking The Connection
if (!$conn)
{
exit("Connection Failed: " . $conn);
}

//Preparing The Query
$sql = "SELECT * FROM Table1 WHERE Field1='$v_Field1'";

//Executing The Query
$rs = odbc_exec($conn,$sql);

//Checking The Result Set
if (!$rs)
{
exit("Error in SQL");
}

echo "<p align='Center'><h1>The Results</h1></p>";

while ( odbc_fetch_row($rs) )

{
  $field1 = odbc_result($rs,1);
  $field2 = odbc_result($rs,2);
  $field3 = odbc_result($rs,3);
  echo "field1 : " . $field1 ;
  echo "field2 : " . $field2 ;
  echo "field3 : " . $field3 ;
}

$RowNumber = odbc_num_rows($rs);

echo "The Number of Selected Rows = " . $RowsNumber ; 

//Closing The Connection
odbc_close($conn);

?>

感谢您的帮助:)

【问题讨论】:

  • 谢谢,但我也试过了,它给了我-1,正如 PHP 手册所说,但这使得这个函数没有实际应用和使用。可能有另一个功能或简单的方法来做到这一点。我希望以前做过类似例子的人回答我。提前致谢。我不想要一种解决方法,比如使用相同的连接进行两个查询,因为我的基本查询并不简单并且没有表名。在此先感谢...

标签: php sql odbc count sybase


【解决方案1】:

在什么基础上,您希望 odbc_num_rows 返回 -1 以外的任何值?

我们从手册中了解到,OBDC 不支持@@ROWCOUNT / odbc_num_rows。因此,没有理由期望它“应该”返回除记录在案之外的任何内容,在所有情况下均为 -1。

即使您直接使用 Sybase(而不是通过 ODBC),您也会遇到同样的“问题”。

  • odbc_num_rows 返回@@ROWCOUNT,即前面的命令插入/更新/删除的行。 -1 是正确的记录值,如果前面的命令是 not insert/update/delete。

  • 它与表格中的行无关。

使用另一个批处理,以及任何一种记录方法来获取表中的行,并将值加载到变量中:

  • SELECT @Count = COUNT(*) -- 慢,需要 I/O
  • SELECT @Count = ROW_COUNT(db_id, object_id) -- 非常快,没有 I/O

然后查询结果数组,得到变量,而不是odbc_num_rows,它会继续返回-1。

【讨论】:

    【解决方案2】:

    在 php.net 中:

    计算驱动程序返回 -1 的 odbc 结果集中的行数的简单方法是让 SQL 完成工作:

    <?php
    
        $conn = odbc_connect("dsn", "", "");
        $rs = odbc_exec($conn, "SELECT Count(*) AS counter FROM tablename WHERE fieldname='" . $value . "'");
        $arr = odbc_fetch_array($rs);
        echo $arr['counter'];
    
    ?>
    

    【讨论】:

      【解决方案3】:

      odbc_num_rows 似乎只对 INSERT、UPDATE 和 DELETE 查询可靠。

      manual 说:

      使用 odbc_num_rows() 来确定 SELECT 后可用的行数将返回 -1 与许多驱动程序。

      解决此问题的一种方法是改为在 SQL 中执行 COUNT(*)。示例见here

      【讨论】:

      • 谢谢 Mr.Pekka ,我在查看手册时读到了这一点,我的问题是如何在不解决问题的情况下直接获取计数。可能还有另一种常用的方式。
      • 感谢您的帮助,尽管这些答案都没有解决我的问题,但我通过制作两个结果集来制作另一个解决方案,一个用于存储我的结果,另一个用于存储计数或行数并且它有效好吧。
      猜你喜欢
      • 2011-02-04
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-01-04
      • 2011-03-04
      相关资源
      最近更新 更多