CakePHP - MySQL - 选择查询和获取结果

时间:2017-08-01 03:19:49

标签: php mysql cakephp

我刚开始使用CakePHP并正在阅读文档。我正在尝试运行一个简单的SELECT * FROM qci_departments查询但是因为它无法让它在CakePHP中运行...任何建议都会受到欢迎。

SamplePageController.php

<?php
namespace App\Controller;
use App\Controlle\AppController;
use Cake\Datasource\ConnectionManager;

use Cake\Core\Configure;
use Cake\Network\Exception\ForbiddenException;
use Cake\Network\Exception\NotFoundException;
use Cake\View\Exception\MissingTemplateException;


class SamplePageController extends AppController {

    /* Function for the displaying the content of the sample page */
    public function index() {
        $this->set('PageTitle','Sample Page');

        $db = ConnectionManager::get('default');
        $result = $db->execute('SELECT * FROM qci_departments')->fetchAll('assoc');
    }
}

sample_page.ctp

<table class="table table-striped table-hover">
  <thead>
    <tr>
      <th>One</th>
      <th>Two</th>
      <th>Three</th>
    </tr>
  </thead>
  <tbody>

    <?php

      foreach ($result as $row) {
        echo '
          <tr>
            <td>'.$row['ID'].'</td>
            <td>'.$row['Department'].'</td>
            <td>'.$row['Positions'].'</td>
      </tr>';
      }
    ?>

  </tdbody>
</table>

我知道CakePHP语法可以防止所有类型的代码注入,并且还有常规的PHP语法,这似乎需要额外的安全和安全预防措施。我的问题是:

  1. 为什么上述查询/获取无效?
  2. 我应该遵循哪种语法? CakePHP还是普通的PHP?
  3. 谢谢你, A2K

    编辑: 为了澄清,我收到的错误是:

    • 未定义的变量:结果[APP / Template / Pages / sample_page.ctp,line 105]为foreach()提供的参数无效 [APP / Template / Pages / sample_page.ctp,第105行]

1 个答案:

答案 0 :(得分:0)

您需要从控制器设置变量,然后才能在视图中使用该变量:

public function index() {
    $this->set('PageTitle','Sample Page');

    $db = ConnectionManager::get('default');
    $result = $db->execute('SELECT * FROM qci_departments')->fetchAll('assoc');
    $this->set(['result'=>$result]); // set variable for view
    // or $this->set(compact('result'));
}

您需要在View中拥有SamplePage文件夹。在那里创建index.ctp文件并将sample_page.ctp中的所有代码复制到View / SamplePage / index.ctp。

如果您正在使用CakePhp,那么请使用框架的约定,这将使事情变得简单。您可以浏览CakePhp blog tutorial