数据库连接¶
1.启用PHP数据库插件¶
在php安装目录下的php.ini文件中启用数据库插件:
1 2 3 4 5 | // postgres数据库 extension=pdo_pgsql extension=pgsql // mysql数据库 extension=pdo_mysql |
2.编辑数据库连接配置¶
1.通过app.php配置¶
打开项目下config/app.php文件编辑【Datasources】,修改默认数据库连接配置
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 | 'Datasources' => [
'default' => [
// 表示与数据库服务器的连接的类的完全命名空间的类名。 该类负责加载数据库驱动程序,提供SQL事务机制以及准备SQL语句等。
'className' => Connection::class,
// 用于实现数据库引擎所有特性的驱动程序的类名。 这可以是使用插件语法的短类名,完全命名空间的名称或构造的驱动程序实例。
// 短类名的示例是Mysql,Sqlite,Postgres和Sqlserver。连接不同数据库,将短类名替换即可。
'driver' => Postgres::class,
// 是否使用与数据库的持久连接。在使用表锁及事务的情况下,不要开始持久化连接,在脚本无法释放表锁或者脚本在事务阻塞前结束,会导致其随后使用相同连接的脚本将会被持久的阻塞,需要重启数据服务器才能解决
'persistent' => false,
// 数据库服务器的主机名(或IP地址)
'host' => 'host',
'port' => 'port',
// 数据库用户名
'username' => 'username',
// 数据库密码
'password' => 'password',
// 数据库名称
'database' => 'db_name',
// 未设置值,默认为UTF-8。MariaDB 和 MySQL 可设置utf8mb4。
// 'encoding' => 'utf8mb4',
// 服务器时区
'timezone' => 'UTC',
// 不建议禁用元数据缓存,可能导致性能非常差。
'cacheMetadata' => true,
// 查询日志记录
'log' => false,
// 如果在表或列名称中使用保留字或特殊字符,则设置为true,否则不要启用, 它会降低性能。
'quoteIdentifiers' => false,
// 连接创建时,需要执行的sql列表
//'init' => ['SET GLOBAL innodb_stats_on_metadata = 0'],
],
],
|
2.通过.env环境变量配置¶
打开config/bootstrap.php文件,将下面代码解除注释
1 2 3 4 5 6 7 | if (!env('APP_NAME') && file_exists(CONFIG . '.env')) { $dotenv = new \josegonzalez\Dotenv\Loader([CONFIG . '.env']); $dotenv->parse() ->putenv() ->toEnv() ->toServer(); } |
1 2 3 4 5 | // Postgres 数据库 export DATABASE_URL="Postgres://username:password@host:port/db_name?encoding=utf8&timezone=UTC&cacheMetadata=true"eIdentifiers=false&persistent=false" // Mysql 数据库 export DATABASE_URL="Mysql://username:password@host:port/db_name?encoding=utf8mb4&timezone=UTC&cacheMetadata=true"eIdentifiers=false&persistent=false" |
打开项目下config/app.php文件编辑【Datasources】,新增名称为【environment】的数据库连接配置
1 2 3 4 5 | 'Datasources' => [ 'environment' => [ 'url' => env('DATABASE_URL'), ], ], |
3.测试¶
在src/Controller下新建ConnectionController.php,写入代码:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 | <?php namespace App\Controller; use Cake\Datasource\ConnectionManager; use Cake\Database\Exception\MissingConnectionException; class ConnectionController extends AppController { // 初始化controller public function initialize() { parent::initialize(); $this->loadComponent('RequestHandler'); } /** * 测试数据库连接 */ public function testConnection() { // 关闭返回view $this->autoRender = false; try { $connection = ConnectionManager::get('default'); $connected = $connection->connect(); if ($connected) { echo "数据库已连接"; } } catch (MissingConnectionException $e) { echo "数据库连接异常"; return; } } } |
在config/routes.php中添加路由配置:
1 2 3 4 5 6 7 8 | $routes->resources('Connection', [ 'map' => [ 'testConnection' => [ 'action' => 'testConnection', 'method' => 'GET' ] ] ]); |
使用postman访问http://localhost:8765/connection/test_connection 查看