这个php函数应该递归运行吗?

时间:2012-06-23 21:47:46

标签: php mysql html sql database

我在类文件中遇到问题:

    public static function getPageLeft($pid)
{
    self::_dbConnect();
    echo "now " .$pid;
    $pid--;
    echo " after ". $pid;
    $data = mysql_query("SELECT id FROM evening_pages WHERE id='".$pid."'") or die(mysql_error());
    $rows = mysql_num_rows($data);
    if($rows == 1){
        echo "  in  ";
        return $data;

    }elseif($pid != self::getMinPage()){
        self::getPageLeft($pid);
        echo " Current: " . $pid . " min: " .self::getMinPage();
    }
}

我有回声只用于调试,我得到:

现在22岁以后21岁21岁之后20岁当前:21分钟:1

此代码用于查找数据库驱动的CMS中的下一页,以防客户端从数据库中删除一行,它会找到下一个较低的值。

所以页面ID是22,你的on,在数据库中查找id 21,如果它不在那里它应该为行返回0然后继续并再次尝试但是在id 20上,但是有一个id = 20的条目

有人发现代码有任何问题吗?

在尝试查找当前页面之前不存在的页面时也会出现此错误,例如在第22页,但没有21的ID:

警告:mysql_fetch_array()期望参数1为资源,在第37行的/home/prelas/public_html/index.php中给出null

有代码(第37行是while):

    $getPageLeft = sql::getPageLeft($pid);
while($row = mysql_fetch_array($getPageLeft)){
        $pageleft = $row['id'];
    }

非常感谢。

只需快速编辑:“in”永远不会回显,但是当没有删除的页面时,导航工作正常。

进一步编辑:使用代码的代码(如37):

    $navigation = '<div id="direction">
      <span class="inNav"> <a href="index.php?pid='. $min .'">&lt;&lt;</a>&nbsp;&nbsp;&nbsp;&nbsp;<a href="index.php?pid='. $pageleft .'">&lt;</a>&nbsp;&nbsp; </span><span class="black">&bull;</span><span class="inNav">&nbsp;&nbsp;&nbsp;<a href="index.php?pid='. $pageright .'">&gt;</a>&nbsp;&nbsp;&nbsp;&nbsp;<a href="index.php">&gt;&gt;</a></span>
  </div>'

所以你可以看到它在那里使用$ pageleft但是当它处理空白页面时,值是空的(空)。

1 个答案:

答案 0 :(得分:2)

为什么不编写SQL语句来获取下一个较低的ID?例如:

 SELECT `id`
   FROM `evening_pages`
   WHERE `id` < ?
   ORDER BY `id` DESC
   LIMIT 1

或者:

 SELECT MAX(`id`)
   FROM `evening_pages`
   WHERE `id` < ?

这样,您只需要检查查询是否返回了某些内容。减少代码,减少数据库请求的开销。

mysql扩展正在逐步淘汰。了解如何使用mysqli或PDO,并了解SQL injection的危险。