ThinkPHP 6/8 如何配置 MySQL 数据库连接
在 thinkphp 6 和 8 中,mysql 数据库连接不再通过手写代码实例化,而是通过修改 config/database.php 配置文件并调用 db::connect() 或模型基类来完成。你需要确保 database 配置数组中的 hostname、username、password 和 database 字段正确填写,然后在控制器或模型中直接使用 db facade 进行查询,框架会自动复用已建立的连接池。

多数据库连接与动态切换实现方法
当需要连接多个不同的 MySQL 实例时,应在 config/database.php 的 connections 数组中定义多个连接别名,并在代码中使用 Db::connect('别名') 显式指定目标连接。这种方式允许你在同一个应用中同时操作主库和从库,或者连接不同服务器的数据库,而无需重启服务或重新初始化全局配置。

安装、修复、更新或打包一个基于 Python 和 PyMySQL 实现的 Windows `mysql` 命令。适用于用户希望在 PowerShell/CMD 中输入 `mysql` 时重定向到 Python 实现、需要交互式输入 MySQL 连接信息、需要同步到当前用户本地 bin 目录,或需要将该能力封装成可公开复用的 Codex skill。
// config/database.php
return [
'default' => 'mysql',
'connections' => [
'mysql' => [
'type' => 'mysql',
'hostname' => '127.0.0.1',
'database' => 'main_db',
'username' => 'root',
'password' => '123456',
'charset' => 'utf8mb4',
'prefix' => '',
],
'slave' => [
'type' => 'mysql',
'hostname' => '192.168.1.100',
'database' => 'slave_db',
'username' => 'reader',
'password' => 'reader_pass',
'charset' => 'utf8mb4',
],
],
];
// Controller usage
use think\facade\Db;
public function readData()
{
// 默认使用 'mysql' 连接
$data = Db::name('users')->select();
// 显式切换到 'slave' 连接
$slaveData = Db::connect('slave')->name('logs')->select();
return ['main' => $data, 'slave' => $slaveData];
}
基于连接失败异常的具体处理逻辑
当 MySQL 连接因网络中断、密码错误或数据库服务未启动而失败时,ThinkPHP 会抛出 think\exception\DbException。开发者可以通过捕获该异常来获取具体的错误信息(如 SQLSTATE 码),从而区分是认证失败还是连接超时,并据此执行重试机制或返回友好的错误提示,避免直接暴露底层数据库错误细节给前端用户。

try {
$result = Db::connect('mysql')->query('SELECT 1');
} catch (\think\exception\DbException $e) {
// 获取具体错误码
$errorInfo = $e->getPrevious()->errorInfo; // PDO errorInfo
if ($errorInfo[0] == '28000') {
// 处理认证失败
return json(['code' => 401, 'msg' => 'Database auth failed']);
} elseif ($errorInfo[0] == 'HY000' && $errorInfo[1] == 2002) {
// 处理连接拒绝/超时
return json(['code' => 503, 'msg' => 'Database connection timeout']);
}
// 其他未知数据库错误
return json(['code' => 500, 'msg' => 'DB Error: ' . $e->getMessage()]);
}
php免费学习视频:立即使用
踏上前端学习之旅,开启通往精通之路!从前端基础到项目实战,循序渐进,一步一个脚印,迈向巅峰!










