PHP 访问数据库的操作类,如何获取一条记录后第2次调用函数能获取下一条记录

wuxia2118 2018-10-20 09:50:22
下面是PHP访问数据库类中获取一条记录的函数,可我是希望每次调用它,都能自动调用下一条记录,但调用这个函数多次,每次都只能返回第一条记录,有好的办法改吗。

function getOne($sql){
  $result = mysql_query($sql,$this->conn);
  $data = array();
  if($result && mysql_num_rows($result)>0){
    $data = mysql_fetch_assoc($result);
  }
  return $data;
}


我把它改成下面这样,不仅多了一个参数,而且调用时用while循环,它还是会出错。
function getOne($sql,$pos=1){
$result = mysql_query($sql,$this->conn);
$data = array();
if($result && mysql_num_rows($result)>0){
if($pos)mysql_data_seek($result, $pos);
$data = mysql_fetch_assoc($result);
}
return $data;
}


  <? $i=0;
while($row = $db->getOne($sql,$i)){ //显示结果集中记录
?>
<tr><td ><?= $row['ID'] ?></td> <td><?= $row['content'] ?></td>
<td><?= $row['author'] ?></td> <td><?= $row['email'] ?></td>
<td><?= $row['ip']?></td>
<td><a href="delete.php?id=<?= $row['ID'] ?>">删除</a></td>
<td><a href="editform.php?id=<?= $row['ID'] ?>">更新</a></td>
</tr>
<? $i++;
} ?>


这个操作如果不封装成函数很好实现,封装成函数后反而变得很麻烦了一样。
...全文
342 5 打赏 收藏 转发到动态 举报
写回复
用AI写文章
5 条回复
切换为时间正序
请发表友善的回复…
发表回复
下雨的声音丶 2018-10-22
  • 打赏
  • 举报
回复
    <? 
        $i=0;
        $rows = $db->getAll($sql);
        foreach($rows as $row){
    ?>
    <tr>
        <td ><?= $row['ID'] ?></td> <td><?= $row['content'] ?></td>
        <td><?= $row['author'] ?></td> <td><?= $row['email'] ?></td>
        <td><?= $row['ip']?></td>
        <td><a href="delete.php?id=<?= $row['ID'] ?>">删除</a></td>
        <td><a href="editform.php?id=<?= $row['ID'] ?>">更新</a></td>
    </tr>
    <? } ?>
查询数据库是非常耗费时间资源的。这样全部取出来循环比你一条一条取效率高得多
下雨的声音丶 2018-10-22
  • 打赏
  • 举报
回复
/**
* [getAll 获取所有信息]
* @param [string] $sql [sql语句]
* @return [array] [返回二维数组]
*/
function getAll($sql){
  $result = mysql_query($sql,$this->conn);
  $data = array();
  if($result && mysql_num_rows($result)>0){
    while($row = mysql_fetch_assoc($result)){
    $data[] = $row;
    }
  }
  return $data;
}
你怎么不用这个方法?得到数据直接循环数组显示出来不就好了吗
wuxia2118 2018-10-22
  • 打赏
  • 举报
回复
可是getAll()方法我不好把每一行单独嵌入到HTML代码中,比如<tr>中,虽然可以对返回的数组又用循环遍历一遍,把每个数组元素放入<tr>中,但那样就要多用一次循环遍历,所以我不喜欢,我想如果getOne()方法能够每次移动结果集指针的话,就可以少用一次循环了,效率高一些。
xuzuning 2018-10-22
  • 打赏
  • 举报
回复
既然是 “我觉得还简单的问题”,那么为何不自己解决呢?
他不是有 getAll 方法吗?
/**
* [getAll 获取所有信息]
* @param [string] $sql [sql语句]
* @return [array] [返回二维数组]
*/
function getAll($sql){
  $result = mysql_query($sql,$this->conn);
  $data = array();
  if($result && mysql_num_rows($result)>0){
    while($row = mysql_fetch_assoc($result)){
    $data[] = $row;
    }
  }
  return $data;
}
wuxia2118 2018-10-21
  • 打赏
  • 举报
回复
难道这个我觉得还简单的问题没人知道吗,PHP 访问数据库类的完整代码在下面:
https://www.jb51.net/article/120463.htm

21,887

社区成员

发帖
与我相关
我的任务
社区描述
从PHP安装配置,PHP入门,PHP基础到PHP应用
社区管理员
  • 基础编程社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧