【问题标题】:OOP PHP MySQL return multiple rows and variableOOP PHP MySQL 返回多行和变量
【发布时间】:2014-03-27 08:34:43
【问题描述】:

如果我的问题可能太简单,我是 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 函数中有多行(来自表)。 我怎样才能返回这多行?我应该使用数组吗? 请帮我解决这个问题,任何回复都非常感谢

【问题讨论】:

  • 我测试过并出错 - 错误是什么?

标签: php mysql arrays oop


【解决方案1】:
  1. 你正在编码 PHP4 OOP 风格,这已经很过时了。不要使用var,使用publicprotectedprivate

  2. $this-&gt;title = $rowmenu[title]在这里,title用作常量(无引号),正确:$this-&gt;title = $rowmenu['title'],与$rowcategories[title]相同

  3. "SELECT * FROM $db" 这是正确的吗?或者你的意思是SELECT * FROM menu WHERE xxx='" . $db . "',如果查找失败,你会发现错误吗?

你还应该看看 PHP 设计模式和代码风格来改进!

【讨论】:

    【解决方案2】:

    尝试以下 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>
    

    【讨论】:

    • 谢谢你的回答,现在已经解决了。再次非常感谢你:)
    • 如果这个答案对你有帮助,那么请投票或接受这个答案作为正确答案
    • 我认为你需要再做一次。您首先将其标记为已接受,然后再次单击以将其标记为未接受:)
    猜你喜欢
    • 2015-08-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-08-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多