如何使用ODBC连接在PHP中获取结果集中的计数或行数?
当我在我的PHP web应用程序中构建一个网页时,我的连接工作正常,但是当我想得到我在查询中使用的SELECT语句的行数时,它给了我-1!!虽然我的结果集大约有10行 我想得到结果集的实际行数。 我搜索了PHP手册和文档,但没有找到像计数函数之类的直接方法 我想知道是否必须在另一个查询中生成Count(*)SQL语句,并将其附加到我的连接以获取行数 有人知道一种简单直接的方法吗 odbc_num_rows函数的结果总是为-1,因此我无法获得实际的行数 我的编程语言是PHP,数据库引擎是Sybase,连接数据库的方式是ODBC 以下是我使用的代码:-如何使用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
//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手册所说,但这使得这个函数没有实际应用和使用。可能有另一个功能或简单的方法来实现这一点。我希望以前做过类似例子的人都能回答我。提前谢谢。我不想采用类似于使用相同连接进行两个查询的变通方法,因为我的基本查询并不简单,而且没有表名。先谢谢你。。。