php 8.0+需添加extension=pdo_mysql(无.dll后缀),7.4及以下启用;extension=php_pdo_mysql.dll,确认extension_dir路径正确、dll存在且重启apache;若new pdo()报“could not find driver”,需检查php -m或phpinfo()中pdo与pdo_mysql是否均显示enabled。

php.ini里没找到extension=php_pdo_mysql.dll怎么办
不是所有XAMPP版本都默认写明这行,尤其新版PHP(如8.0+)已改用extension=pdo_mysql(不带.dll后缀)。直接搜不到时,别急着手动添加整行,先确认PHP版本:php -v 或看phpinfo()输出。
常见情况和操作:
- PHP 7.4 及以下:找
;extension=php_pdo_mysql.dll,去掉分号 - PHP 8.0 及以上:找
;extension=pdo_mysql,去掉分号;若整行不存在,就在[Dynamic Extensions]区块末尾新增extension=pdo_mysql - 确保
extension_dir指向正确路径,比如extension_dir="C:/xampp/php/ext",且该目录下确实存在php_pdo.dll和php_pdo_mysql.dll(或pdo_mysql.dll) - 改完必须重启Apache,否则
phpinfo()里看不到PDO相关模块
为什么new PDO()报“could not find driver”
这是PDO扩展启用但驱动没加载的典型错误,和pdo_mysql是否真正就位强相关。不是光开了extension=pdo_mysql就完事。
检查步骤:
- 运行
php -m | findstr pdo(Windows命令行),看输出是否含pdo和pdo_mysql - 打开
phpinfo()页面,搜索“PDO”和“pdo_mysql”,确认两处都显示“enabled”且有对应版本信息 - 如果只看到
pdo但没pdo_mysql,大概率是DLL文件缺失或路径错——去C:\xampp\php\ext\下确认php_pdo_mysql.dll(旧版)或pdo_mysql.dll(新版)存在 - 注意:XAMPP自带的PHP是线程安全版(TS),不能混用非TS的DLL
连接MySQL该用PDO还是mysqli
推荐优先用PDO,但不是无条件。关键看你的实际需求场景:
- 需要切换数据库类型(比如后期可能换PostgreSQL或SQLite)→ 必选
PDO,接口统一,改DSN就行 - 只连MySQL、追求极致性能或用到MySQL特有功能(如
mysqli::real_escape_string、存储过程多结果集)→mysqli更直接,函数名和行为更贴近原生协议 - 项目已用Laravel、Symfony等框架 → 它们底层基本走
PDO,你只需配好DSN,不用操心驱动细节 - 注意:XAMPP默认同时启用了
mysqli和pdo_mysql,两者不互斥,可以共存
远程连接失败时,PDO连接串里最容易漏的参数
本地能连、远程死活报“Connection refused”或“Access denied”,除了MySQL权限和防火墙,PDO连接串本身常被忽略三个点:
- 端口必须显式写全:XAMPP默认是
3306,但如果改过,host后面一定要加:端口号,例如mysql:host=192.168.1.100:3307;dbname=test - 字符集建议强制指定:
;charset=utf8mb4,避免中文乱码或插入emoji失败(utf8在MySQL里实际是utf8mb3) - 禁用持久连接(尤其开发环境):
;persistent=false,否则连接池复用可能导致权限校验异常或超时堆积 - 如果MySQL用户只允许
localhost登录,远程连会直接拒——得用CREATE USER 'user'@'%' IDENTIFIED BY 'pass'; GRANT ALL ON db.* TO 'user'@'%'; FLUSH PRIVILEGES;
XAMPP里PDO_MySQL能不能用,核心就卡在php.ini改对没、DLL在不在、Apache重没重启。很多“连不上”的问题,其实phpinfo()一页就能定位到根子在哪。











