代码之家  ›  专栏  ›  技术社区  ›  sam

PHP:重用数据库类

  •  1
  • sam  · 技术社区  · 16 年前

    我创建了一个类,允许我执行以下操作:

    $db->query($query);
    

    $db->query($query);
    while($row = $db->fetch_assoc()){
        $db->query($anotherquery);
        echo $db->result();
    }
    

    它“打破”了课堂。我不想经常重新声明我的类(例如:$seconddb=newdatabase()),有没有办法解决这个问题?我希望能够在$db内重用$db,而不重写“outside”db。目前我正在创建一个数据数组(从db->fetch_assoc(),然后执行foreach,然后在其中执行db调用:

    $db->query('SELECT * FROM table');
    while($row = $db->fetch_assoc()){
        $arr[] = $row;
    }
    
    foreach($arr as $a){
        $db->query(); // query and processing here
    }
    

    这是最好的方法还是我错过了显而易见的方法?我应该考虑用数据库连接传递一个连接链接ID吗?

    3 回复  |  直到 16 年前
        1
  •  2
  •   Ignacio Vazquez-Abrams    16 年前

    $db->query() 返回一个“query”对象,然后可以为查询结果迭代该对象。

        2
  •  1
  •   Vidar Vestnes    16 年前

    您应该考虑让$db->query()方法返回结果,这样就不需要在结果中保存状态。

    // psaudo
    class DB{
    
      function query($sql){
        $db->query('SELECT * FROM table');
        $arr = array();
        while($row = $db->fetch_assoc()){
          $arr[] = $row;
        }
        return $arr;
      }
    
    }
    

    但是,像您的例子一样有一个嵌套的查询循环的方式可能非常慢,并且不能扩展。

        3
  •  1
  •   Michael D. Irizarry    16 年前

    $query = $this->db->query("YOUR QUERY");
    
    foreach ($query->result_array() as $row)
    {
       echo $row['title'];
       echo $row['name'];
       echo $row['body'];
    }
    
    推荐文章