“could not find driver”错误表明pdo_mysql扩展未加载,需检查php -m输出确认是否缺失pdo_mysql,再通过php --ini定位真实php.ini路径,取消extension=pdo_mysql.so(Linux)或extension=php_pdo_mysql.dll(Windows)注释,确保extension_dir正确且文件存在,重启PHP-FPM与Web服务后验证。

PHP8项目启动时报错“could not find driver”或phpinfo()中PDO drivers为空,说明pdo_mysql扩展未正确加载,必须立即修复才能连接MySQL数据库。
确认pdo_mysql是否真没加载
打开终端,执行:
php -m | grep -i pdo
若输出只有pdo、pdo_sqlite而没有pdo_mysql,问题就锁定在扩展配置环节。这一步不能跳过——Web环境可能缓存旧配置,命令行结果才最真实。
若看到pdo_mysql,但项目仍报错,说明是Web服务器(Apache/Nginx+PHP-FPM)用的不是当前CLI的php.ini,需立刻执行php --ini查出Web服务实际加载的配置路径。
修正php.ini中的扩展配置
方法一:Windows系统(如phpEnv、XAMPP)
① 打开php.ini,确认extension_dir指向的目录下存在php_pdo_mysql.dll文件;
② 取消以下两行前的分号:
extension=php_pdo_mysql.dll
extension=php_pdo.dll
③ 注意顺序:php_pdo.dll必须在php_pdo_mysql.dll之前启用,否则驱动注册失败。
方法二:Linux/macOS系统
取消注释:
extension=pdo_mysql.so
extension=pdo.so
确保extension_dir路径正确,且.so文件真实存在。若用apt/yum安装的PHP,通常无需手动指定路径,但需确认包已安装:sudo apt install php-mysql(Ubuntu/Debian)或sudo yum install php-pdo php-mysqlnd(CentOS/RHEL)。
【关键陷阱】很多集成环境(如phpEnv)默认提供的是NTS版PHP,却配了TS版dll——此时即使文件名对、路径对,扩展也永远加载失败。务必核对PHP版本类型:php -v输出末尾带“NTS”还是“TS”,再匹配对应DLL。
强制重启并验证生效
重启PHP-FPM和Web服务器:
Linux:sudo systemctl restart php8.0-fpm && sudo systemctl restart nginx
Windows:在服务管理器中重启Apache2.4和php8.0-FPM服务。
面向 CRM 系统的 MySQL 8 数据库模式设计。当用户需要为客户关系管理(CRM)系统设计、评审、优化或生成数据库模式时,应使用此项技能。
重启后,再次执行php -m | grep pdo_mysql,必须看到明确输出。然后新建test_pdo.php放入Web根目录:
直接浏览器访问该文件。若显示OK,说明pdo_mysql已可用;若报错“could not find driver”,说明上一步重启不彻底或配置仍错位。
ThinkPHP8专用校验项
打开config/database.php,检查以下三项是否全部满足:
‘type’ => ‘mysql’(必须是小写mysql,不能写pdo或MySQL)
‘hostname’ => ‘127.0.0.1’(【严禁用localhost】,Windows下会走命名管道导致权限判定失效)
‘hostport’ => 3306(显式声明,不可省略或注释)
若database.php中‘database’值为空或指向不存在的库名,TP8会在Db::table(‘user’)时才报错,但PDO连接本身已成功——所以此步只影响后续查询,不影响驱动加载验证。
处理MySQL 8.0认证插件冲突
若PDO连接时抛出PDOException: The server requested authentication method unknown to the client [caching_sha2_password],说明MySQL用户用了新认证插件,而PHP未适配。
方法一(推荐):登录MySQL执行:
ALTER USER 'root'@'127.0.0.1' IDENTIFIED WITH mysql_native_password BY 'your_password';
FLUSH PRIVILEGES;
方法二:修改MySQL全局配置,在my.cnf的[mysqld]段追加:
default_authentication_plugin = mysql_native_password
然后重启MySQL服务。
注意:方法一仅改单个用户,更安全;方法二影响所有新建用户。两种方式都必须执行FLUSH PRIVILEGES,否则不生效。
php免费学习视频:立即使用
踏上前端学习之旅,开启通往精通之路!从前端基础到项目实战,循序渐进,一步一个脚印,迈向巅峰!










