【问题标题】:PHP: reusing database classPHP:重用数据库类
【发布时间】:2010-03-07 23:58:18
【问题描述】:

我建立了一个允许我做的类:

$db->query($query);

而且效果很好,但如果我想这样做:

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

它“破坏”了班级。我不想经常重新声明我的班级(例如:$seconddb = new database()),有没有办法解决这个问题?我希望能够在 $db 中重用 $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 与数据库连接一起传递吗?

【问题讨论】:

标签: php mysql class


【解决方案1】:

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

【讨论】:

    【解决方案2】:

    您应该考虑让 $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】:

      你应该使用

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

      【讨论】:

        猜你喜欢
        • 2013-08-03
        • 2011-08-01
        • 1970-01-01
        • 1970-01-01
        • 2014-09-23
        • 1970-01-01
        • 2014-01-08
        • 1970-01-01
        • 2023-01-30
        相关资源
        最近更新 更多