XAMPP 默认内置 SQLite3 扩展,但 Windows 下须手动启用 php_sqlite3.dll 和 php_pdo_sqlite.dll,否则 new SQLite3() 或 PDO("sqlite:...") 会报“class not found”或“could not find driver”;需确认并编辑实际生效的 php.ini(通过 phpinfo() 查看 Loaded Configuration File),取消 extension=php_sqlite3.dll 和 extension=php_pdo_sqlite.dll 前的分号,保存后重启 Apache,并用 php -m 或 phpinfo() 验证加载成功。

XAMPP 默认已内置 SQLite3 扩展,但 Windows 下必须手动启用 php_sqlite3.dll 和 php_pdo_sqlite.dll,否则 new SQLite3() 或 PDO("sqlite:...") 会直接报 “class not found” 或 “could not find driver”。
确认 php.ini 是当前生效的配置文件
很多人改了错的 php.ini —— XAMPP 里可能有多个:带 -dist 后缀的是模板,php.ini(无后缀)才是运行时加载的。最可靠的方式是:
- 在 Web 目录下建一个
info.php,内容为<?php phpinfo(); ?> - 浏览器访问
http://localhost/info.php - 搜索 “Loaded Configuration File”,看到的路径就是你要编辑的那个
php.ini
启用 sqlite3 和 pdo_sqlite 扩展(Windows XAMPP)
打开上一步确认的 php.ini,查找并取消以下三行的注释(删掉开头的分号 ;):
extension=php_sqlite3.dll extension=php_pdo_sqlite.dll extension=sqlite3
注意:extension=sqlite3 这行在较新 XAMPP(如 v3.3.x)中可能不存在,也不需要补;重点是前两行。如果只开 php_sqlite3.dll 而没开 php_pdo_sqlite.dll,PDO 方式就会报 “could not find driver”。
改完保存,重启 Apache(不是只刷新页面)。
XAMPP 8.0.30 是一款免费、开源的跨平台 Web 服务器集成包,专为快速搭建本地 PHP 开发环境而设计。该版本核心组件包括:Apache 2.4.56、MySQL 8.0.33、PHP 8.0.30、phpMyAdmin 5.2.1 等。它支持 Windows、Linux 和 macOS 系统,可让开发者在个人电脑上轻松模拟服务器环境,无需复杂配置即可运行 WordPress、Thin
验证扩展是否真正加载成功
别信“我改了 ini 就一定生效”,必须实测:
- 命令行执行
php -m | findstr sqlite(Windows)或php -m | grep sqlite(macOS/Linux),应输出sqlite3和pdo_sqlite - 或在
info.php页面搜索 “sqlite”,看到两块表格(SQLite3 和 PDO drivers → sqlite)才算到位 - 写个测试脚本:
<?php $db = new SQLite3('test.db'); var_dump($db); ?>,能输出对象说明类可用;再试new PDO('sqlite:test.db')看 PDO 是否通
常见失败点:Apache 用的是另一个 PHP 实例(比如系统 PATH 里的旧版 PHP),或修改后没重启服务,或扩展 DLL 文件实际缺失(检查 xampp/php/ext/ 下是否存在 php_sqlite3.dll 和 php_pdo_sqlite.dll)。
连接 SQLite 数据库时容易忽略的权限和路径问题
即使扩展开了,new SQLite3('test.db') 仍可能静默失败或报错,原因往往不在扩展本身:
- PHP 进程(Apache 的 httpd.exe)必须对数据库文件所在目录有读写权限;XAMPP 默认以
SYSTEM或当前用户身份运行,但若把 DB 放在C:\Program Files\下就大概率被拦截 - 相对路径是相对于 PHP 脚本所在位置,不是 Apache 根目录;建议用绝对路径:
__DIR__ . '/data/test.db' - 首次创建数据库时,目录必须存在且可写;
test.db文件不需预先创建,SQLite 会自动建,但父目录不行 - Windows 下路径反斜杠要小心,推荐统一用正斜杠或
dirname(__FILE__)拼接
SQLite 是进程内数据库,没有服务、不占端口、不需用户名密码——但它对文件系统权限和路径语义极其敏感,这点比扩展启用本身更常导致“连不上”。

















