【问题标题】:Storing variables in loop and passing it to controller在循环中存储变量并将其传递给控制器
【发布时间】:2017-06-24 01:57:30
【问题描述】:

这是我的代码/布局:

while($row = $stmt->fetch(PDO::FETCH_ASSOC)) {
    $username = $row['username'];
    $first_name = $row['first_name'];
    $last_name = $row['last_name'];
}

如您所见,我正在遍历我的“用户”数据库表,并且有数千个用户。

如何存储信息并将其传递给我的控制器以显示信息?

【问题讨论】:

    标签: php arrays loops model-view-controller


    【解决方案1】:

    您可以使用fetchAll 方法将它们全部提取到一个数组中,而不是使用while 循环:

    $rows = $stmt->fetchAll(PDO::FETCH_ASSOC);
    

    但是您真的要获取整个用户表吗?您的应用程序似乎需要做很多工作。通常对于诸如索引之类的东西(例如),您会使用分页,这样您就不必为每个请求获取数千行。

    【讨论】:

    • 是的,你说得对。现在不知道如何进行分页,所以我这样做是为了学习。 fetchAll 和 Nate 的回答在获取后将所有内容放入数组有什么区别?
    • 效果一样。 fetchAll 只是一种快捷方式。
    • 好的,谢谢。在性能和速度很重要的场景中(例如社交网络),最快、最有效的方式是什么?
    • 我认为fetchAll 可能比在循环中将单行获取到数组中快一点,尽管我还没有测试过。但是,如果您正在执行相同的查询并获取相同的记录,则差异将可以忽略不计。选择合理大小的记录集、优化查询和添加适当的索引将在性能上产生比您选择的获取方法更大的差异。
    【解决方案2】:

    在不知道您面临的具体问题的情况下很难回答这个问题。但是,如果您正在寻求关于模型-视图-控制器的基本指导,那么这个极其简化的课程大纲可能会提供一些指导:

    class MyModel
    {
        public function getData()
        {
            $toReturn = array();
    
            // Prepare & execute your SQL statement.
    
            while ($row = $stmt->fetch(PDO::FETCH_ASSOC)) {
                $toReturn[] = array(
                    $row['username'],
                    $row['first_name'],
                    $row['last_name']
                );
            }
            return $toReturn;
        }
    }
    
    class MyController
    {
        public function indexAction() 
        {
            $model = new MyModel();
    
            // Retrieve the data from the model.
            $dataForView = $model->getData();
    
            // Send the data to the view so it can be displayed.
            $this->render($dataForView);
        }
    }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2019-01-31
      • 2020-06-07
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多