PHP与MySQL连接成功的关键是环境、权限、参数、编码四点对齐;需启用mysqli或pdo_mysql扩展,确认MySQL服务运行并授权用户,PDO推荐charset=utf8mb4及异常模式,MySQLi需调用set_charset确保编码正确。

PHP与MySQL连接配置,关键不在“会不会写代码”,而在于“每一步是否可验证”。只要环境、权限、参数、编码四点对齐,连接就基本不会失败。
确认PHP已加载MySQL支持扩展
没有扩展,一切连接都是空谈。必须确保mysqli或pdo_mysql至少启用其一:
- 打开php.ini文件,查找extension=mysqli和extension=pdo_mysql,删掉行首分号(;)取消注释
- 保存后重启Apache/Nginx或PHP-FPM服务
- 新建
info.php,内容为<?php phpinfo(); ?>,浏览器访问,搜索“mysqli”或“pdo_mysql”——看到对应模块即表示加载成功
检查MySQL服务状态与访问权限
PHP连不上,往往不是PHP的问题,而是MySQL没在听、或不认你这个人:
- 命令行执行
mysql -u root -p,能登录说明MySQL服务正常运行 - 创建专用测试用户(避免用root),例如:
CREATE USER 'webapp'@'localhost' IDENTIFIED BY 'SecurePass2026!';CREATE DATABASE app_data CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;GRANT ALL ON app_data.* TO 'webapp'@'localhost'; FLUSH PRIVILEGES; - 注意:若PHP与MySQL不在同一台机器,需将
'localhost'改为'%'或具体IP,并确认MySQL的bind-address未限制为127.0.0.1
用PDO方式建立安全连接(推荐)
PDO是当前最佳实践,统一接口、内置预处理、异常可控,适合长期维护项目:
立即学习“PHP免费学习笔记(深入)”;
- 连接字符串中明确指定
charset=utf8mb4,避免中文/emoji乱码 - 开启异常模式:
PDO::ATTR_ERRMODE => PDO::ERRMODE_EXCEPTION,让错误立刻暴露 - 禁用模拟预处理:
PDO::ATTR_EMULATE_PREPARES => false,确保SQL注入防护真正生效 - 示例代码(可直接测试):
<?php<br>$dsn = "mysql:host=localhost;dbname=app_data;charset=utf8mb4";<br>try {<br> $pdo = new PDO($dsn, "webapp", "SecurePass2026!", [<br> PDO::ATTR_ERRMODE => PDO::ERRMODE_EXCEPTION,<br> PDO::ATTR_DEFAULT_FETCH_MODE => PDO::FETCH_ASSOC<br> ]);<br> echo "✅ PDO连接成功";<br>} catch (PDOException $e) {<br> die("❌ 连接失败:" . $e->getMessage());<br>}<br>?>
用MySQLi面向对象方式快速验证
如果项目仅用MySQL、追求轻量简洁,MySQLi面向对象方式响应快、语法直白,适合调试和小型系统:
- 构造连接后立即调用
$mysqli->set_charset('utf8mb4'),比只在DSN里写charset更可靠 - 通过
$mysqli->connect_error获取具体失败原因(如“Access denied”或“Connection refused”) - 示例代码:
<?php<br>$mysqli = new mysqli("localhost", "webapp", "SecurePass2026!", "app_data");<br>if ($mysqli->connect_error) {<br> die("❌ MySQLi连接失败:" . $mysqli->connect_error);<br>}<br>$mysqli->set_charset('utf8mb4');<br>echo "✅ MySQLi连接成功";<br>?>



















