处理查询/多个查询的多个结果时的最佳做法?

时间:2012-06-12 10:31:46

标签: php mysql oop

这是我第一次制作一个允许很多用户访问它的PHP应用程序,所以我以前就不用担心加载速度了。我现在就做。

这些是我想到的方式,但它们似乎都有点像“hack-ish”,我确信有更好的方法。

对于索引页面,我可以这样:

<h1><?php $job->getTitle($id); ?></h1>
<p><?php $job->getDescription($id); ?></p>
<p><?php $job->getSomethingElse($id); ?></p>

班级为:

function getTitle($id) {
    $query = "SELECT title FROM table WHERE id = $id";
    $result = $db->query($query);

    $row = $result->fetch_array(MYSQLI_ASSOC);
    echo $row['title'];
}

function getDescription($id) {
    $query = "SELECT description FROM table WHERE id = $id";
    $result = $db->query($query);

    $row = $result->fetch_array(MYSQLI_ASSOC);
    echo $row['description'];
}

等...

或者我可以有一个函数,将所有结果调用到一个数组。将它们存储为String并在我需要时将它们爆炸。

我的另一个想法与上面类似,只不过我在课堂上做了所有事情并且回应了html。

在输出速度方面,最好的方法是什么?

3 个答案:

答案 0 :(得分:2)

我认为它可以更好地执行一次查询..因此,您可以随时获取所需的所有详细信息并随时使用

 function getDetails($id){
     $query = "SELECT title,description FROM table WHERE id = $id";
     $result = $db->query($query);

     return $result->fetch_array(MYSQLI_ASSOC);

 }

你可以使用

 <?php  $details = $job->getDetails($id); ?>
 <h1><?php echo $details['title']; ?></h1>
 <p><?php echo $details['description']; ?></p>

我不太了解这个......

答案 1 :(得分:2)

为每个属性创建一个getter和setter,运行1个查询,设置所有变量并使用getter获取实际值。

这样的事情应该有效:

    private $name;
    private $street;
    private $number;

    public function setName($name)
    {
        $this->name = $name;
    }

    public function getName()
    {
        return $this->name;
    }

    public function setNumber($number)
    {
        $this->number = $number;
    }

    public function getNumber()
    {
        return $this->number;
    }

    public function setStreet($street)
    {
        $this->street = $street;
    }

    public function getStreet()
    {
        return $this->street;
    }


    public function getUser()
    {
        $query = "SELECT * FROM users WHERE x = y";

        $this->setName($result['name']);
        $this->setStreet($result['street']);
        $this->setName($result['number']);

    }

答案 2 :(得分:2)

是的,你有没有听过MVC(模型 - 视图 - 控制器)设计模式?

虽然我不希望你重写整个你的应用程序,你仍然可以习惯使用模型......通过这种方式(以非常简单的方式)你创建一个class Model的{​​{1}}查询数据库以加载所有必要数据并将其存储在私有/ publi / protected(无论什么使你感觉良好)属性的方法。

然后在该模型上调用这些__construct($id)方法,只返回它的属性值...

像这样:

类文章{         私人$ title;         私人$描述;         private $ somethingElse;

getXYZ()

就是这样......只需一个查询来检索所有数据......

在您想要编辑此模型的情况下您还可以创建 public function __construct($id) { $query = "SELECT title, description, somethingElse FROM table WHERE id = $id"; $result = $db->query($query); $row = $result->fetch_array(MYSQLI_ASSOC); $this->title = $row['title']; $this->description = $row['description']; $this->somethingElse = $row['somethingElse']; } public function getTitle() { return $this->title; } public function getDescription() { return $this->description; } public function getSomethingElse() { return $this->somethingElse; } 方法,这些方法将设置setXYZ($value)$this->XYZ = $value;方法,以更新数据库中这个非常具体的行...

这些方法(get和set)称为getter和setter ......