在php中显示多个mysql行的最佳方法是什么?(先取后显示或先取后显示)

在php中显示多个mysql行的最佳方法是什么?(先取后显示或先取后显示),php,performance,oop,optimization,iteration,Php,Performance,Oop,Optimization,Iteration,正如问题所述 我实现了一个函数,其中它从数据库(*1)获取多行,然后(*2)将每行实例化为一个对象。实例化后,对象存储到数组中,然后将结果返回给调用方函数,然后遍历结果数组,显示每个对象,并为每个对象添加html格式 以下是代码片段: function find_all() { //(*1) Fetch 30 comments from DB $sql = 'SELECT * FROM comments'; $sql .= ' ORDER BY datetime DES

正如问题所述

我实现了一个函数,其中它从数据库(*1)获取多行,然后(*2)将每行实例化为一个对象。实例化后,对象存储到数组中,然后将结果返回给调用方函数,然后遍历结果数组,显示每个对象,并为每个对象添加html格式

以下是代码片段:

function find_all() {
    //(*1) Fetch 30 comments from DB
    $sql  = 'SELECT * FROM comments';
    $sql .= ' ORDER BY datetime DESC LIMIT 30';
    return find_by_sql($sql);
}

function find_by_sql($sql='') {
    global $database;
    $result_set = $database->query($sql);
    $object_array = array();

    while($row = $database->fetch_array($result_set)) {
        //(*2) Instantiate each row to a Comment object
        //     and then stores each comment to an object array
        $object_array[] = Comment::instantiate($row); 
    }
    return $object_array;
}


//(*3) Format and display each result.
$comments = find_all();
foreach ( $comments as $comment ) {
    // Not sure if syntax is correct.. anyhow..
    echo "<li>$comment->get_text()</li>";
}
函数find_all(){
//(*1)从DB获取30条评论
$sql='SELECT*FROM comments';
$sql.='ORDER BY datetime DESC LIMIT 30';
返回find_by_sql($sql);
}
函数find_by_sql($sql=''){
全球$数据库;
$result\u set=$database->query($sql);
$object_array=array();
而($row=$database->fetch\u数组($result\u set)){
//(*2)将每一行实例化为注释对象
//然后将每个注释存储到对象数组中
$object_array[]=注释::实例化($row);
}
返回$object\u数组;
}
//(*3)格式化并显示每个结果。
$comments=find_all();
foreach($comments作为$comment){
//不确定语法是否正确..无论如何。。
echo“
  • $comment->get_text()
  • ”; }
    然而,我喜欢上面的方法,因为它更干净、更容易阅读、更易于维护,并且更易于面向对象。但问题是,显示结果所需的时间要比简单地遍历每个结果所需的时间长,而不是在获取结果后显示每个结果所需的时间长,如下所示:

    while ($row = mysql_fetch_array($sql)) {
        echo "<li>$row['text']</li>";
    }
    
    while($row=mysql\u fetch\u数组($sql)){
    echo“
  • $row['text']
  • ”; }
    我知道它慢的原因。我想知道的是,有没有更好的方法来解决上述问题


    虽然缓存可能是一个好主意,但它不会有帮助,因为每次获取列表时我都需要更新列表。

    我认为如果脚本只获取您对结果集感兴趣的部分,则速度可能会快一些,因为fetch_array()返回两个具有相同结果集的数组:关联数组和数值数组

    通过添加MYSQLI_ASSOC(如果使用MYSQLI):MYSQLI_fetch_数组($result,MYSQLI_ASSOC),或者尝试使用mysql_fetch_ASSOC(),脚本只接收关联数组。
    您可以在pmyadmin中进行测试以查看差异。

    是否仅获取所需行?如果使用
    *
    获取数据,可能会得到大量不需要的数据保存在数组中。@RobinCastlin hi,我之所以使用
    *
    是因为我需要每行中的所有信息,但它们并不太多。这就是id、文本和日期。:)我们说的是几排?尽管回声更快,但它真的有明显的区别吗?还是你需要高性能?在易于开发和维护以及尽可能最佳的性能之间取得了平衡。你最喜欢哪一个?@RobinCastlin实际上我两个都想要。性能和可维护性。说到行,也许我们有30行。大约我有10秒的时间来加载所有结果,但当我立即显示所有内容时,几乎是瞬间。换句话说,区别是非常明显的。Hi@CoursesWeb正如我告诉RobinCastlin我使用的原因*因为我需要每行中的所有信息,它们并不太多。这就是id、文本和日期。:)这其实是另一回事。你能在这个函数返回的一行上做一个print_r()吗?也许我们可以看看它是如何保存的?