答案是php未启用pdo_mysql扩展:需用php -m确认cli环境已加载pdo和pdo_mysql,再通过phpinfo()核对web环境的php.ini路径及extension=pdo_mysql.so是否启用,二者必须一致且驱动名严格为'mysql'。

在macOS上运行ThinkPHP模型查询时突然报错“could not find driver”或“Class 'PDO' not found”,不是模型写错了,也不是数据库配置漏填了,而是PHP根本没加载pdo_mysql扩展——Homebrew装的PHP默认不带这个驱动,必须手动启用才能让Db::table()->select()这类操作正常执行。
确认当前PHP环境是否真启用了pdo_mysql
打开终端,运行:php -m | grep -E "pdo|mysql"。如果只看到pdo但没有pdo_mysql,说明扩展未启用;若连pdo都看不到,那pdo主扩展也没开。
接着验证Web环境:在项目根目录新建info.php,写入<?php phpinfo(); ?>,用浏览器访问它,搜索“Loaded Configuration File”,记下该php.ini的绝对路径。
【关键前提】CLI和Web必须共用同一套扩展启用状态:你刚在终端跑出的php -m结果,只代表命令行PHP;而ThinkPHP网页请求走的是Web SAPI(如PHP-FPM),它读的是phpinfo()里显示的那个php.ini。两个环境的extension=pdo_mysql.so必须都存在且未被注释。
Homebrew安装PHP后启用pdo_mysql的两种方法
方法一:用brew直接安装扩展(推荐)
先确认PHP版本,例如是php@8.2,则运行:brew install php@8.2-mysql。安装完成后,检查其自动写入的ini文件——通常位于/opt/homebrew/etc/php/8.2/conf.d/ext-mysql.ini,确保内容为extension="pdo_mysql.so"(不带路径,PHP 7.4+ 自动补后缀)。
方法二:手动编辑php.ini启用(当brew未生成ini时)
用nano /opt/homebrew/etc/php/8.2/php.ini打开对应php.ini,在;extension=区块末尾添加一行:extension=pdo_mysql.so。注意不要加引号、不要写绝对路径、不要漏掉.so后缀——写成extension="pdo_mysql"或extension=/opt/.../pdo_mysql.so都会失败。
⚠️ 提醒:Mac上extension_dir默认指向/opt/homebrew/lib/php/pecl/20220829这类带数字后缀的目录,别手动生成.so文件往错目录扔;brew install会自动把pdo_mysql.so放进正确位置。
重启服务并验证pdo_mysql是否生效
第一步:重启PHP-FPM服务
执行brew services restart php@8.2(如果你用的是php@8.2)。这一步不能跳过,改完php.ini不重启,PHP-FPM仍用旧内存镜像。
第二步:刷新phpinfo()页面,搜索“PDO drivers”,确认列表中明确出现mysql(小写、无下划线、无前缀);再搜索“pdo_mysql”,确认“enabled”状态为enabled。
第三步:回到终端,再次运行php -m | grep pdo_mysql,必须看到输出pdo_mysql——此时CLI与Web环境才真正一致。
第四步:删掉runtime/cache/和runtime/log/下的所有文件,清空ThinkPHP缓存,避免旧错误日志干扰。然后访问你的模型查询接口,Db::name('user')->find()应能返回数据,不再抛Driver not found异常。
php免费学习视频:立即使用
踏上前端学习之旅,开启通往精通之路!从前端基础到项目实战,循序渐进,一步一个脚印,迈向巅峰!











