宝塔面板中php可连接mysql(需mysqli/pdo_mysql扩展)、sqlite(需pdo_sqlite/sqlite3扩展),但二者语法与锁机制差异大,无法真正联动,仅支持应用层多数据源调用。

宝塔面板里 PHP 能连哪些数据库
宝塔本身不决定 PHP 支持哪些数据库,关键看它所安装的 PHP 版本是否启用了对应扩展。常见组合中,mysqlnd(MySQLi / PDO MySQL)、pdo_sqlite、sqlite3 这三者默认在宝塔一键部署的 PHP 环境中基本都已启用——但不是绝对,得手动确认。
容易被忽略的是:PHP 8.0+ 默认不再带 mysql(旧 mysql_* 函数),仅保留 mysqli 和 PDO MySQL;SQLite 方面,pdo_sqlite 和 sqlite3 扩展需同时开启才能完整支持 PDO::sqlite 和 SQLite3 类。
- 进宝塔 → 网站 → PHP 设置 → “配置文件” 旁点“安装扩展”,勾选
mysqli、pdo_mysql、pdo_sqlite、sqlite3 - 扩展装完后务必点“重载配置”,否则 PHP-FPM 不会加载新模块
- 用
php -m | grep -E 'mysql|sqlite'在终端验证是否生效
MySQL 与 SQLite 共存时的 PDO DSN 写法区别
同一套 PHP 代码里要切换 MySQL 和 SQLite,靠的是 PDO 构造时传入不同的 DSN(Data Source Name)。两者语法差异明显,写错一个字符就会报 PDOException: could not find driver 或 invalid data source name。
典型错误是把 SQLite 的路径写成相对路径(如 sqlite:app.db),而 PHP 运行用户(通常是 www)没有当前工作目录读写权限,导致连接失败。
立即学习“PHP免费学习笔记(深入)”;
- MySQL DSN 示例:
mysql:host=127.0.0.1;port=3306;dbname=test;charset=utf8mb4 - SQLite DSN 示例:
sqlite:/www/wwwroot/example.com/app.db(必须是绝对路径,且www用户有读写权限) - 别用
sqlite:./app.db或sqlite:app.db,PHP 工作目录不可控 - SQLite 文件所在目录需
chown www:www并设为755,文件设为644(首次写入时可能需要664)
在 Laravel / ThinkPHP 等框架中切换数据库驱动的实际操作
框架抽象了底层连接,但切换 MySQL ↔ SQLite 不只是改配置项那么简单。Laravel 的 DB_CONNECTION 设为 sqlite 后,迁移命令 php artisan migrate 会尝试建表,但 SQLite 不支持部分 MySQL 语法(如 JSON 字段、AUTO_INCREMENT 多字段、ENGINE=InnoDB),直接报错。
ThinkPHP 的 database.php 中若同时配了 type 为 mysql 和 sqlite,运行时只能生效一个——靠环境变量或条件判断切换,不能“联动”自动选。
- Laravel:SQLite 迁移前先清空
database/migrations/中含 MySQL 专属语法的语句(如$table->json()改成$table->text()) - ThinkPHP:用
Env::get('database.type')动态读取配置,避免硬编码 - 不要指望框架自动转换 SQL 方言,SQLite 就是轻量嵌入式库,不是 MySQL 替代品
- 测试阶段用 SQLite 快,上线必须切回 MySQL,别共用同一套 migration
为什么“MySQL 与 SQLite 联动配置”这个说法容易误导人
“联动”这个词在数据库语境里通常指事务跨库、视图联合查询或实时同步,但 MySQL 和 SQLite 之间不存在服务级通信协议,也没有中间件能真正让二者在一个事务里提交或回滚。所谓“联动”,实际只是 PHP 应用层根据业务逻辑分别打开两个连接,手动协调数据流向。
比如用户注册写 MySQL,日志记录写 SQLite,这不算联动,只是多数据源使用。真要做数据同步,得靠脚本定期导出导入,或监听 MySQL binlog 推送到 SQLite(成本远高于换用单库)。
最常被忽略的点:SQLite 是文件锁机制,高并发写入时容易触发 SQLSTATE[HY000]: General error: 5 database is locked,而 MySQL 的行级锁完全不在此列——别拿 SQLite 当 MySQL 的降级备选来压测。











