Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/69.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何使用ODBC连接在PHP中获取结果集中的计数或行数?_Php_Sql_Odbc_Count_Sybase - Fatal编程技术网

如何使用ODBC连接在PHP中获取结果集中的计数或行数?

如何使用ODBC连接在PHP中获取结果集中的计数或行数?,php,sql,odbc,count,sybase,Php,Sql,Odbc,Count,Sybase,当我在我的PHP web应用程序中构建一个网页时,我的连接工作正常,但是当我想得到我在查询中使用的SELECT语句的行数时,它给了我-1!!虽然我的结果集大约有10行 我想得到结果集的实际行数。 我搜索了PHP手册和文档,但没有找到像计数函数之类的直接方法 我想知道是否必须在另一个查询中生成Count(*)SQL语句,并将其附加到我的连接以获取行数 有人知道一种简单直接的方法吗 odbc_num_rows函数的结果总是为-1,因此我无法获得实际的行数 我的编程语言是PHP,数据库引擎是Sybas

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

我想得到结果集的实际行数。 我搜索了PHP手册和文档,但没有找到像计数函数之类的直接方法

我想知道是否必须在另一个查询中生成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);

?>

odbc\u num\u rows
似乎只适用于插入、更新和删除查询

报告说:

使用odbc_num_rows()确定选择后可用的行数将返回-1,其中包含许多驱动程序

解决此行为的一种方法是在SQL中执行
COUNT(*)
。请参见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'];

?>

在什么基础上,您希望
odbc\u num\u rows
返回除-1之外的任何内容吗

我们从手册中得知,OBDC不支持
@@ROWCOUNT/odbc\u num\u rows
。因此,没有理由期望它“应该”返回除记录的以外的任何东西,在所有情况下都是-1

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


  • odbc\u num\u rows
    返回
    @@ROWCOUNT
    ,它是由上一个命令插入/更新/删除的行-如果前面的命令不是insert/update/delete,则1是正确的记录值

  • 它与表中的行无关

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

  • 选择@Count=Count(*)——慢,需要I/O
  • 选择@Count=ROW\u Count(db\u id,object\u id)——非常快,没有I/O

然后查询结果数组,以获得变量,而不是
odbc_num_rows
,该变量将继续返回-1。

谢谢你,佩卡先生,我在查看手册时读到了这一点,我的问题是如何直接获得计数而不必进行任何处理。可能还有另一种常用的方法。谢谢你的帮助,虽然这两个答案都没有解决我的问题,但我通过生成两个结果集来做出另一个解决方案,一个用来存储我的结果,另一个用来存储计数或行数,效果很好。谢谢你,但我也尝试了,它给了我-1,正如PHP手册所说,但这使得这个函数没有实际应用和使用。可能有另一个功能或简单的方法来实现这一点。我希望以前做过类似例子的人都能回答我。提前谢谢。我不想采用类似于使用相同连接进行两个查询的变通方法,因为我的基本查询并不简单,而且没有表名。先谢谢你。。。