CakePHP 1.简介 CakePHP是一个开源的MVC框架。 它使应用程序的开发,部署和维护变得更加容易。 CakePHP具有多个库来减少大多数常见任务的过载。
本文介绍 CakePHP 该如何连接使用瀚高数据库。
2.加载驱动 具体操作步骤请参考 php_pdo_pgsql 接口说明文档。
3.数据库连接 3.1.数据库准备 create database cakephp; CREATE TABLE public.student ( stu_no character varying NOT NULL, stu_name character varying ); INSERT INTO public.student VALUES ('1' , 'zhangsan' ); INSERT INTO public.student VALUES ('2' , 'lisi' );
3.2.数据库配置 CakePHP有一个用来保存数据库配置的文件(用户名,密码,数据库名等),配置文件 config/app.php
'default' => [ 'className' => 'Cake\Database\Connection' , 'driver' => 'Cake\Database\Driver\Postgres' , 'persistent' => false , 'host' => '192.168.100.101' , 'username' => 'sysdba' , 'password' => 'Qwer@1234' , 'database' => 'cakephp' , 'schema' => 'public' , 'port' => 5866, 'encoding' => 'utf8' , 'timezone' => 'UTC' , ],
3.3.路由配置示例 路由规则定义在 config/routes.php 文件中。
$builder ->connect('/student' , ['controller' => 'Student' , 'action' => 'list' ]);
3.4.Model 代码示例 在 **src/Model/Table/ 新建文件 StudentTable.php **,代码如下:
<?php namespace App\Model\Table; use Cake\ORM\Table; class StudentTable extends Table { /** * Initialize method * * @param array $config The configuration for the Table. * @return void */ public function initialize(array $config ): void { parent::initialize($config ); $this ->setTable('student' ); $this ->setPrimaryKey('id' ); } } ?>
3.5.控制层代码示例 在** src/controllers/ **新建文件 StudentController.php , 代码如下:
<?php namespace App\Controller; use App\Controller\AppController; use Cake\ORM\TableRegistry; use Cake\Datasource\ConnectionManager; use Cake\Auth\DefaultPasswordHasher; class StudentController extends AppController{ public function list (){ $student = TableRegistry::get('student' ); $query = $student ->find(); $this ->set ('results' ,$query ); } } ?>
3.6.View 代码示例 在 templates/ 下新建目录 Student ,新建文件 **list.php **,代码如下:
<table> <tr > <td>StuNo</td> <td>StuName</td> </tr> <?php foreach ($results as $row ): echo "<tr><td>" .$row ->stu_no."</td>" ; echo "<td>" .$row ->stu_name."</td>" ; endforeach; ?> </table>
3.7.访问测试 浏览器访问 http://localhost:8765/student
4.常见问题 1) Database driver Cake\Database\Driver\Postgres cannot be used due to a missing PHP extension or unmet dependency.
问题原因:php未成功加载pdo_pgsql扩展
解决方案:php.ini 文件,检查pdo_pgsql是否加载成功
2) Connection to Postgres could not be established: SQLSTATE[08006] [7] authentication method 13 not supported
问题原因:瀚高数据库支持的认证密码加密方式包括 md5, sm3 和 scram-sha-256 ,报错是因为使用了sm3,驱动不支持国密算法
解决方案一:数据库密码认证方式修改为 md5 或 scram-sha-256
解决方案二:下载替换对应版本的驱动,具体操作方法请参考 php_pdo_pgsql 接口说明