数据库配置与模型设置需依次完成:一、配置连接参数;二、用命令验证连接;三、定义orm模型;四、pdo手动调试;五、多库切换。每步均需严格匹配框架规范,确保读写分离与字符集支持。

如果您正在使用PHP框架开发Web应用,但数据库连接失败或模型无法正确操作数据,则可能是由于数据库配置错误或模型定义不规范。以下是完成数据库配置与模型基础设置的步骤:
一、配置数据库连接参数
数据库配置文件用于声明数据库类型、主机地址、端口、用户名、密码及数据库名称等核心信息,框架通过读取该配置建立PDO或相应驱动的连接实例。
1、在框架配置目录(如config/database.php)中定义数据库连接数组,包含'default'键指定默认连接。
2、设置'driver'为'mysql'、'pgsql'或'sqlite'等对应数据库驱动类型。
立即学习“PHP免费学习笔记(深入)”;
3、填写'host'为数据库服务器IP(如127.0.0.1),'port'为端口号(MySQL默认3306)。
4、指定'database'字段为已创建的目标数据库名,'username'和'password'填入具有访问权限的账户凭证。
5、添加'charset'为'utf8mb4','collation'为'utf8mb4_unicode_ci'以支持完整Unicode字符集。
二、使用框架内置命令初始化数据库连接
多数现代PHP框架提供命令行工具自动检测配置并测试连接可用性,避免手动编写连接代码时出现语法或作用域错误。
1、在项目根目录执行php artisan db:table(Laravel)或php think db:connect(ThinkPHP)验证配置可解析性。
2、若返回“Connection successful”,说明配置项被正确加载且网络可达;若报错“SQLSTATE[HY000] [1045] Access denied”,需检查用户名或密码是否与MySQL实际账户一致。
3、运行php artisan migrate:status确认迁移系统已识别数据库结构管理能力。
三、定义Eloquent或ActiveRecord风格的数据模型
模型类封装了数据表结构映射、字段类型约束及常用查询逻辑,是实现ORM操作的基础单元,必须继承框架提供的基类并声明关联表名。
1、在app/Models目录下创建User.php文件,声明命名空间App\Models。
2、类定义开头添加extends \Illuminate\Database\Eloquent\Model(Laravel)或extends \think\Model(ThinkPHP)。
3、在类内设置protected $table = 'users',显式绑定模型与物理表名,避免框架按复数规则自动推导出错。
4、若主键非'id',需声明protected $primaryKey = 'uid';若为主键非自增,添加public $incrementing = false。
5、对时间戳字段启用控制,设置public $timestamps = true并确保数据表含created_at与updated_at字段。
四、手动构建PDO连接进行调试验证
当框架自动连接失败且日志无明确提示时,可绕过框架配置,用原生PDO直连数据库,快速定位是权限、网络还是配置解析问题。
1、新建test_db.php脚本,写入$dsn = "mysql:host=127.0.0.1;port=3306;dbname=testdb;charset=utf8mb4";。
2、执行$pdo = new PDO($dsn, "root", "password", [PDO::ATTR_ERRMODE => PDO::ERRMODE_EXCEPTION]);。
3、捕获异常:若抛出PDOException,检查root用户是否被限制localhost访问,或需改用127.0.0.1。
4、连接成功后执行$pdo->query("SELECT 1")->fetchColumn();,返回1即表示底层通信正常。
五、配置多数据库连接并动态切换
部分业务场景需同时操作主库与从库,或隔离读写流量,此时需在配置中预设多个连接标识,并在模型或查询构造器中显式调用。
1、在database.php中新增'connections.mysql_read'子数组,仅修改'host'指向从库IP,其余参数与'mysql'一致。
2、在模型类中重写protected $connection = 'mysql_read',强制该模型所有查询走从库。
3、临时切换连接:使用DB::connection('mysql_write')->table('logs')->insert(...)指定写库执行插入。
4、验证连接归属:在查询前调用DB::connection()->getPdo()->getAttribute(PDO::ATTR_CONNECTION_STATUS),输出应含对应主机信息。











