由浅入深详细剖析Zend Framework 2 数据库连接,获取数据
2014年02月24日
第一步:通过代码直接连接数据库,获取数据
注意,这里为了简单举例,在业务逻辑层(Controller)直接处理数据层(Model),实际项目开发时请不要这样做,违背MVC原则.
module/Application/src/Application/Controller/IndexController.php
<?php /** * This source file is part of Qiai. * * PHP Version >=5.3 * * @category Qiai-Project * @package Application * @subpackage Controller * @author Sai (QIAI) <sai@qiais.com> * @license Free-License http://www.qiai.com/license-free * @link http://www.qiais.com */ namespace Application\Controller; use Zend\Mvc\Controller\AbstractActionController; use Zend\View\Model\ViewModel; use Zend\Debug\Debug; use Zend\Db\Adapter\Adapter; class IndexController extends AbstractActionController { /** * getDataByCode Action * 不通过zf2配置文件,直接从代码连接数据库, * 实际项目开发时应将数据库操作置于Model中。 * * @return false */ public function getDataByCodeAction() { //创建数据库适配器 $adapter = new Adapter(array( 'driver' => 'Mysqli', 'database' => 'qiais_cn', 'username' => 'qiais', 'password' => 'qiais312', )); //获取数据 $users = $adapter->query("select * from users", Adapter::QUERY_MODE_EXECUTE); return new ViewModel(array('users' => $users)); } /** * index action * * @return view */ public function indexAction() { return new ViewModel(); } }
接下来添加view文件module/Appcation/view/application/index/get-data-by-code.phtml
<table class="table table-bordered table-striped"> <tr><th>姓名</th><th>邮箱</th></tr> <?php foreach ($this->users as $key => $user): ?> <tr> <td><?php echo $user['name']; ?></td> <td><?php echo $user['email']; ?></td> </tr> <? endforeach; ?> </table>
访问http://zf2-tutorial/application/index/get-data-by-code
因为从数据库取出数据时没有设置编码,这里出现乱码,暂时不管它,
第二步:通过配置文件连接数据库,获取数据
配置根目录下的config/autoload/global.php文件
config/autoload/global.php
<?php /** * This source file is part of Qiai. * * PHP Version >=5.3 * * @category Qiais-Project * @package Config * @subpackage Global * @author Sai (QIAI) <sai@qiais.com> * @license Free http://www.qiai.com/license-free * @link http://www.qiais.com */ return array( 'db' => array( 'driver' => 'Pdo', 'dsn' => 'mysql:dbname=qiais;host=localhost', 'username' => 'qiais_cn', 'password' => 'qiais312', 'driver_options' => array( PDO::MYSQL_ATTR_INIT_COMMAND => 'SET NAMES \'UTF8\'' ), ), 'service_manager' => array( 'factories' => array( 'Zend\Db\Adapter\Adapter' => 'Zend\Db\Adapter\AdapterServiceFactory', ), ), );
注意,这里我们配置了读取数据库的编码方式为UTF8,就不会出现乱码了。
通过配置文件连接数据库,获取数据
module/Application/src/Application/Controller/IndexController.php
<?php /** * This source file is part of Qiai. * * PHP Version >=5.3 * * @category Qiais-Project * @package Application * @subpackage Controller * @author Sai (QIAI) <sai@qiais.com> * @license Free http://www.qiai.com/license-free * @link http://www.qiais.com */ namespace Application\Controller; use Zend\Mvc\Controller\AbstractActionController; use Zend\View\Model\ViewModel; use Zend\Debug\Debug; use Zend\Db\Adapter\Adapter; /** * Login controller for user module * * @category Qiais-Project * @package Application * @subpackage Controller */ class IndexController extends AbstractActionController { /** * getDataByConfiguration Action * 通过zf2配置文件,连接数据库,获取数据 * * @return false */ public function getDataByConfigurationAction() { $db = $this->getServiceLocator()->get('Zend\Db\Adapter\Adapter'); $users = $db->query("select * from users", Adapter::QUERY_MODE_EXECUTE); $viewModel = new ViewModel(array('users' => $users)); //这里调用get-data-by-code.phtml文件作为输出模版 $viewModel->setTemplate('application/index/get-data-by-code.phtml'); return $viewModel; } /** * getDataByCode Action * 不通过zf2配置文件,直接从代码连接数据库, * 实际项目开发时应将数据库操作置于Model中。 * * @return false */ public function getDataByCodeAction() { //创建数据库适配器 $adapter = new Adapter(array( 'driver' => 'Mysqli', 'database' => 'qiais_cn', 'username' => 'qiais', 'password' => 'qiais312' )); //获取数据 $results = $adapter->query("select * from users", Adapter::QUERY_MODE_EXECUTE); foreach ($results as $result) { Debug::dump($result, 'qiai-query-code'); } return false; }
因为我们设置了view的模版文件,所以不用新建view文件。
访问http://zf2-tutorial/application/index/get-data-by-configuration