我有一个php类来处理下面给出的MySql数据
<?php
class DB_Functions
{
function __construct()
{
require_once 'DB_Connect.php';
$db=new DB_Connect();
$db->connect();
}
function __destruct()
{
}
public function getDetails($username,$password)
{
$result = mysql_query("Select * from teachertb where Username = '$username' and password = '$password'") or die(mysql_error());
$no_of_rows = mysql_num_rows($result);
if($no_of_rows>0)
{
return $result;
}
else
{
return false;
}
}
public function getClass($res)
{
while($r=mysql_fetch_array($res))
{
echo $r[0]."<br>";
echo $r[1]."<br>";
echo $r[2]."<br>";
echo $r[3]."<br>";
}
}
}
$d=new DB_Functions();
$res=$d->getDetails("abcd","abcd");
$d->getClass($res);
while($r=mysql_fetch_array($res))
{
echo $r[0]."<br>";
echo $r[1]."<br>";
echo $r[2]."<br>";
echo $r[3]."<br>";
}
?>
在这段代码中,实际上我想使用结果集来显示表中的数据,并在另一个函数中使用相同的结果集来使用数据执行其他功能。 但我注意到相同的结果集不能使用多次。为什么会这样? 我怎样才能多次使用相同的结果集。
答案 0 :(得分:1)
原因是每次调用mysql_fetch_array
时都会使用结果集的下一行。
有两种选择:
<强>第一强>
你必须调用getClass,返回值为$r=mysql_fetch_array($res)
,在你的情况下为$r
(对于每个返回的行)。或者你必须首先将所有行放在一个数组中并将其传递给其他函数。
while($r=mysql_fetch_array($res))
{
// call another function with $r as parameter
}
或
$result = array();
while($r=mysql_fetch_array($res))
{
$result[] = $r;
}
// $result array now contains all rows and can be passed to other methods.
请参阅http://php.net/manual/de/function.mysql-fetch-array.php
<强>第二强>
您也可以通过调用mysql_data_seek(请参阅http://php.net/manual/de/function.mysql-data-seek.php)重置为资源的内部指针,然后您可以从第一行开始再次使用mysql_fetch_array
。