我有一个处理MySql数据的php类
<?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>";
}
?>
在这段代码中,实际上我想使用结果集来显示表中的数据,并在另一个函数中使用相同的结果集来使用数据执行其他一些功能。但我注意到,相同的结果集不能使用不止一次。为什么会这样呢?我怎么能多次使用相同的结果集。
这样做的原因是每次调用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
从第一行开始。