温馨提示×

thinkphp在ubuntu怎么连接数据库

小樊
45
2026-10-01 15:25:21
栏目: 编程语言

在 Ubuntu 下使用 ThinkPHP 连接数据库,主要分为 安装环境、配置数据库、测试连接 几个步骤。下面以 ThinkPHP 6 / 8(目前主流版本)为例说明。


一、准备工作(Ubuntu 环境)

1. 安装 PHP 及必要扩展

sudo apt update
sudo apt install php php-cli php-fpm php-mysql php-pdo php-mbstring php-xml php-curl

检查扩展:

php -m | grep -E "pdo|mysql"

2. 安装并启动数据库(以 MySQL 为例)

sudo apt install mysql-server
sudo systemctl start mysql
sudo systemctl enable mysql

设置数据库密码(可选):

sudo mysql_secure_installation

创建数据库和用户:

CREATE DATABASE tp_db DEFAULT CHARACTER SET utf8mb4;
CREATE USER 'tp_user'@'localhost' IDENTIFIED BY '123456';
GRANT ALL PRIVILEGES ON tp_db.* TO 'tp_user'@'localhost';
FLUSH PRIVILEGES;

二、ThinkPHP 数据库连接配置

方式一:修改配置文件(推荐)

编辑:

config/database.php

示例配置:

return [
    'default' => 'mysql',
    'connections' => [
        'mysql' => [
            'type'     => 'mysql',
            'hostname' => '127.0.0.1',
            'database' => 'tp_db',
            'username' => 'tp_user',
            'password' => '123456',
            'hostport' => '3306',
            'charset'  => 'utf8mb4',
            'prefix'   => '',
        ],
    ],
];

⚠️ 如果是 生产环境,建议使用 .env 文件


方式二:使用 .env 配置(推荐)

.env 文件:

DB_TYPE=mysql
DB_HOST=127.0.0.1
DB_NAME=tp_db
DB_USER=tp_user
DB_PASS=123456
DB_PORT=3306
DB_CHARSET=utf8mb4

config/database.php:

'hostname' => env('DB_HOST', '127.0.0.1'),
'database' => env('DB_NAME', ''),
'username' => env('DB_USER', ''),
'password' => env('DB_PASS', ''),

三、测试数据库连接

1. 控制器中测试

use think\facade\Db;

public function test()
{
    $res = Db::query("SELECT VERSION()");
    dump($res);
}

访问路由,如果能看到 MySQL 版本信息,说明连接成功 ✅


2. 使用模型测试

$user = Db::name('user')->find(1);
dump($user);

四、常见问题

❌ 连接失败:SQLSTATE[HY000] [2002]

  • MySQL 没启动
  • hostname 写错(用 127.0.0.1 不用 localhost)
  • 防火墙问题

❌ 找不到 pdo_mysql

sudo apt install php-mysql
sudo systemctl restart php-fpm

❌ 权限问题

确保数据库用户允许 localhost 连接


五、总结

ThinkPHP 在 Ubuntu 连接数据库核心就三步:

  1. Ubuntu 装 PHP + MySQL
  2. 配置 database.php 或 .env
  3. 用 Db 类测试

如果你用的是 ThinkPHP 5 / 宝塔 / Docker / SQLite,可以告诉我,我可以给你对应方案。

0 踩