繁体   English   中英

OOP PHP MySQL返回多行和变量

[英]OOP PHP MySQL return multiple rows and variable

如果我的问题可能太简单了,我是w / OPP的新手,请原谅:)表格类别,导航等包含多行(类别:三星,苹果等;以及导航:关于我们,条款等),并且两者都作为菜单在所有页面(首页,产品等)中

我的旧PHP代码和工作良好如下

    <div id="categories">
    <ul>
        <?
        $mydbcategories = new myDBC();
        $resultcategories = $mydbcategories->runQuery("SELECT * FROM `category`");
        while ($rowcategories = $mydbcategories->runFetchArray($resultcategories)) {
            echo '<li><a href="'.ROOT_URL.$rowcategories[url].'">'.$rowcategories[title].'</a></li>';
        }
        ?>
    </ul>
    </div>
    <div id="navigation">

    <ul>
        <?
        $mydbnavigation = new myDBC();
        $resultnavigation = $mydbnavigation->runQuery("SELECT * FROM `navigation`");
        while ($rownavigation = $mydbnavigation->runFetchArray($resultnavigation)) { echo '<li><a href="'.ROOT_URL.$rownavigation [url].'">'.$rownavigation [title].'</a></li>';
        }
        ?>
    </ul>
    </div>

我想实现OOP PHP并创建类,然后将其存储在classes.php中

   <?
   class Menu{
   var $title;
   var $url; 
   function setMenu($db){
   $mydbMenu= new myDBC();
   $resultmenu = $mydbMenu->runQuery("SELECT * FROM `$db`");
   $resultmenurows = mysqli_num_rows($resultmenu);
   while ($rowmenu = $mydbMenu->runFetchArray($resultmenu)){
        $this->title = $rowmenu[title];
        $this->url = $rowmenu[url];
    }
  }
  function getTitle() { return $this->title;}
  function getUrl() { return $this->url;}
  }
  ?>

然后用下面的新代码编辑旧代码;

    <div id="categories">
    <ul>
    <?
   $catmenu = new Menu();
   while ($catmenu ->setMenu('category')) { 
       echo '<li><a href="'.ROOT_URL.$catmenu->getUrl().'">'.$catmenu->getTitle().'</a></li>';
        }
        ?>
    </ul>
    </div>

    <div id="navigation">
    <ul>
        <?
        $navmenu = new Menu();
        while ($navmenu ->setMenu('category')) {
  echo '<li><a href="'.ROOT_URL.$navmenu ->getUrl().'">'.$navmenu ->getTitle().'</a></li>';
        }
        ?>
    </ul>
 </div>

我测试了错误,可能是因为setMenu函数中有多行(来自表)。 我如何返回这多行? 我应该使用数组吗? 请帮我解决这个问题,任何回复都非常感谢

  1. 您正在编写PHP4 OOP样式,这已经过时了。 不要使用var ,使用publicprotectedprivate

  2. $this->title = $rowmenu[title]在这里, title用作常量(不带引号),正确: $this->title = $rowmenu['title'] ,与$rowcategories[title]

  3. "SELECT * FROM $db"是否正确? 还是说SELECT * FROM menu WHERE xxx='" . $db . "' ,如果查找失败,您是否会捕获错误?

您还应该查看PHP的设计模式和代码样式以进行改进!

尝试遵循以下PHP代码

<?

class Menu {

var $title;
var $url;

    function setMenu($db) {
        $mydbMenu = new myDBC();
        $resultmenu = $mydbMenu->runQuery("SELECT * FROM `$db`");
        $resultmenurows = mysqli_num_rows($resultmenu);
        $this->title = array();
        $this->url = array();
        while ($rowmenu = $mydbMenu->runFetchArray($resultmenu)) {
            $this->title[] = $rowmenu['title'];
            $this->url[] = $rowmenu['url'];
        }
    }

    function getTitle($ind) {
        return $this->title[$ind];
    }

    function getUrl($ind) {
        return $this->url[$ind];
    }

}
?>

和HTML

<div id="categories">
    <ul>
        <?
        $catmenu = new Menu();
        $catmenu->setMenu('category');
        $i = 0;
        while ($catmenu->getTitle($i)) {
            echo '<li><a href="' . ROOT_URL . $catmenu->getUrl($i) . '">' . $catmenu->getTitle($i) . '</a></li>';
            $i++;
        }
        ?>
    </ul>
</div>

<div id="navigation">
    <ul>
        <?
        $navmenu = new Menu();
        $navmenu->setMenu('navigation');
        while ($navmenu->getTitle($i)) {
            echo '<li><a href="' . ROOT_URL . $navmenu->getUrl($i) . '">' . $navmenu->getTitle($i) . '</a></li>';
            $i++;
        }
        ?>
    </ul>
</div>

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM