PHP连接数据库服务器主要通过MySQLi和PDO两种扩展实现,具体选择取决于项目是否可能更换数据库以及对性能的极致要求。
PHP怎么连接数据库服务器?两种主流方法对比
在开始写代码之前,你需要先明白PHP连接数据库服务器有哪些选择,目前主流方案是MySQLi和PDO,MySQLi是专门为MySQL设计的扩展,而PDO是通用数据库抽象层,如果你的项目未来可能从MySQL迁移到PostgreSQL或SQLite,PDO是更好的选择,如果项目固定使用MySQL且追求极致性能,MySQLi的面向对象版本也足够优秀。参考2
| 特性 | MySQLi | PDO |
|---|---|---|
| 数据库支持 | 仅MySQL | 12种以上数据库 |
| API风格 | 面向对象/过程化 | 仅面向对象 |
| 预编译语句 | 支持 | 支持 |
| 命名参数 | 不支持 | 支持 |
| 驱动加载 | 简单 | 需额外配置 |
业内专家指出,选择哪种方式并不影响核心功能,但PDO的命名参数绑定在复杂查询中更易读,对于初学者,MySQLi的文档更丰富,学习曲线更低;对于需要跨数据库的项目,PDO是行业标准。
PHP连接数据库代码怎么写?从连接到查询
PHP连接MySQL数据库步骤详解
第一步:确认PHP环境已启用对应扩展,在php.ini中取消注释extension=mysqli或extension=pdo_mysql,重启服务器后可通过phpinfo()验证。
第二步:准备连接参数,你需要知道数据库服务器地址(通常是localhost或127.0.0.1)、用户名、密码、数据库名,如果数据库服务器不是默认端口,还需要指定端口号。参考2
第三步:建立连接,以MySQLi面向对象为例:
$mysqli = new mysqli('localhost', 'root', 'password', 'test_db');
if ($mysqli->connect_error) {
die('连接失败: ' . $mysqli->connect_error);
}
第四步:设置字符集,这是防止乱码的关键一步,务必在连接后立即执行:
$mysqli->set_charset('utf8mb4');
PDO连接示例:
try {
$dsn = 'mysql:host=localhost;dbname=test_db;charset=utf8mb4';
$pdo = new PDO($dsn, 'root', 'password');
$pdo->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
} catch (PDOException $e) {
die('连接失败: ' . $e->getMessage());
}
PHP连接数据库服务器配置参数详解
除了基本的host、username、password,还有一些参数需要关注,在php.ini中,可以设置mysql.connect_timeout控制连接超时时间,默认60秒,对于高并发场景,建议使用持久连接:mysqli_pconnect()或PDO的PDO::ATTR_PERSISTENT,但持久连接在处理长事务时需谨慎,避免连接占用过久。
封装连接代码提升复用性
实际开发中,通常将连接代码封装成函数或类,避免重复编写,一个简单的配置示例:
define('DB_HOST', 'localhost');
define('DB_USER', 'root');
define('DB_PASS', 'password');
define('DB_NAME', 'test_db');
function getConnection() {
$mysqli = new mysqli(DB_HOST, DB_USER, DB_PASS, DB_NAME);
if ($mysqli->connect_error) {
throw new Exception('连接失败: ' . $mysqli->connect_error);
}
$mysqli->set_charset('utf8mb4');
return $mysqli;
}
这样在项目中任何需要连接的地方调用getConnection()即可,也便于后期修改配置。
PHP连接数据库服务器需要哪些配置参数?
PHP端配置
在php.ini中,与数据库连接相关的参数包括:
extension=mysqli/extension=pdo_mysql:启用扩展mysql.default_host、mysql.default_user等:默认连接参数(不推荐,建议显式指定)mysql.connect_timeout:连接超时秒数,默认60max_execution_time:脚本执行时间,长时间查询可能超时
MySQL端配置
在my.cnf或my.ini中,以下参数影响PHP连接:
max_connections:最大连接数,默认151,并发高时需增加wait_timeout:非交互连接超时,默认28800秒(8小时),短连接建议调低bind-address:绑定地址,设为0.0.0.0允许远程连接
实际部署时,需根据服务器负载调整这些参数,避免连接被拒绝或超时。
PHP连接数据库的安全最佳实践
行业共识认为,安全连接数据库的第一原则是永远不要信任用户输入,使用预编译语句(Prepared Statements)可以有效防止SQL注入,无论使用MySQLi还是PDO,都应优先使用参数绑定,而不是拼接SQL字符串。参考2
数据库用户的权限应遵循最小化原则,只给Web应用所需的SELECT、INSERT、UPDATE、DELETE权限,不要使用root账户,密码建议存储在环境变量或配置文件之外,避免硬编码在源码中。
还可以考虑使用SSL加密连接,特别是在远程数据库场景下,在连接时添加ssl参数即可,但需要服务端支持,对于云数据库(如简米云RDS),通常要求开启SSL或白名单,需在连接前确认。
常见问题:PHP连接数据库服务器失败怎么办?
遇到连接失败时,按以下顺序排查:
- 检查扩展是否启用:
php -m | grep mysql - 查看网络连通性:
telnet 数据库服务器IP 3306 - 确认用户名密码是否正确
- 检查数据库是否允许远程连接(bind-address配置)
- 查看防火墙是否开放3306端口
- 核实用户权限:
SELECT user, host FROM mysql.user
多数情况下,连接失败是因为配置文件中的host写成了localhost而MySQL未开启socket连接,或者密码错误,如果使用远程数据库,还需确保云厂商的安全组入方向规则允许访问。
关于PHP连接数据库服务器的常见问题
Q1: PHP连接数据库服务器超时是怎么回事?
A1: 通常是由于数据库服务器负载过高、网络延迟或连接池耗尽导致,可以尝试调整php.ini中的mysql.connect_timeout参数,或优化数据库查询。
Q2: PHP连接数据库代码中localhost和127.0.0.1有什么区别?
A2: 在大多数情况下没有区别,但localhost会通过Unix套接字连接,而127.0.0.1强制使用TCP/IP,如果你的MySQL配置禁止TCP连接,使用localhost可能更快。
Q3: PHP连接MySQL数据库步骤中字符集设置重要吗?
A3: 非常重要,设置字符集为utf8mb4可以确保存储emoji等特殊字符,避免乱码问题,在连接后立即调用set_charset(‘utf8mb4’)是标准做法。
无论选择MySQLi还是PDO,核心都是保持代码整洁、安全,并理解连接的本质,掌握这些基础知识,你就能在PHP项目中自信地连接数据库服务器。
首发原创文章,作者:王坚,如若转载,请注明出处:https://idctop.com/article/532070.html



