上一篇
用php怎么连接数据库代码怎么写
- 数据库
- 2025-08-19
- 5
PHP连接数据库常用PDO或mysqli扩展,示例:
$pdo = new PDO('mysql:host=localhost;dbname=test', 'user', 'pass');
或 `$conn = new mysqli(‘localhost’, ‘user’, ‘pass’,
是使用 PHP 连接数据库的详细指南,涵盖基础语法、常用方法及最佳实践:
准备工作
在编写代码前需确认以下信息:
- 数据库类型(如 MySQL、PostgreSQL 等);
- 服务器地址(本地通常为
localhost
); - 用户名和密码;
- 目标数据库名称。
使用 mysqli
扩展实现基础连接
这是推荐给初学者的方式,因其简单直观且广泛支持,示例如下:
<?php // 定义连接参数 $servername = "localhost"; // 主机地址(默认本地) $username = "root"; // 数据库用户名 $password = "your_db_password"; // 对应密码 $dbname = "test_database"; // 要操作的数据库名 // 尝试建立连接并捕获错误 $conn = new mysqli($servername, $username, $password, $dbname); // 检查是否成功 if ($conn->connect_error) { die("连接失败: " . $conn->connect_error); // 输出具体错误信息便于调试 } else { echo "恭喜!数据库连接成功。"; // TODO: 在此添加后续操作(如查询、插入数据等) } // 记得最后关闭连接以释放资源 $conn->close(); ?>
关键函数说明:
方法/属性 | 作用 | 备注 |
---|---|---|
new mysqli() |
创建新实例并立即尝试连接 | 参数顺序固定:主机→用户→密码→库名 |
connect_error |
获取最后一次错误的详细描述 | 可用于友好提示或日志记录 |
close() |
显式关闭当前活动的数据库链接 | PHP自动回收但建议手动管理 |
替代方案:传统过程式风格
若习惯面向过程编程,可用以下写法:
$link = mysqli_connect($servername, $username, $password, $dbname); if (!$link) { exit("无法建立链接: ". mysqli_connect_error()); } // 执行其他操作后别忘了调用 mysqli_close($link);
注意这种写法缺乏对象导向的优势,不推荐用于复杂项目。
进阶选择:PDO(PHP Data Objects)
对于需要支持多种数据库类型的应用,推荐使用 PDO:
try { // DSN格式:驱动名+冒号开头,后面跟具体配置项用分号分隔 $dsn = 'mysql:host=localhost;dbname=test_database;charset=utf8mb4'; $options = [PDO::ATTR_ERRMODE => PDO::ERRMODE_EXCEPTION]; // 开启异常模式方便排错 $pdo = new PDO($dsn, $username, $password, $options); echo "通过PDO成功连接到数据库!"; // 后续所有操作都通过这个统一接口完成 } catch (PDOException $e) { // 统一处理所有数据库相关异常 echo "连接过程中出现错误: " . $e->getMessage(); }
PDO核心优势对比表:
特性 | mysqli | PDO |
---|---|---|
多数据库兼容性 | × 仅限MySQL家族 | 支持主流关系型数据库 |
预处理语句安全性 | 有但语法较繁琐 | 标准化接口更易维护 |
事务控制能力 | 基础级别 | 完整ACID事务支持 |
参数绑定机制 | 分散在不同方法中 | 统一的bindValue/bindParam系列 |
错误处理模式 | 混合隐式与显式返回值 | 可配置的异常抛出机制 |
安全注意事项
- 永远不要硬编码敏感信息:将凭证存储在环境变量或配置文件中,并确保其不被版本控制系统追踪;
- 强制使用预处理语句:
// 错误做法(易受SQL注入攻击) // $sql = "SELECT FROM users WHERE email='{$_GET['email']}'"; // 正确做法:准备带占位符的模板然后绑定参数 $stmt = $pdo->prepare("SELECT FROM users WHERE email = :email"); $stmt->execute(['email' => filter_input(INPUT_GET, 'email')]);
- 最小权限原则:为应用程序分配仅能满足需求的数据库账户权限;
- 定期更新依赖库:保持PHP版本及数据库驱动处于最新状态以修复安全破绽。
常见调试技巧
当遇到连接问题时,可以按以下步骤排查:
- 检查防火墙设置是否阻止了相应端口(默认MySQL是3306);
- 使用命令行工具单独测试凭据有效性:
mysql -u root -p -h localhost
; - 启用PHP错误显示临时辅助诊断:
ini_set('display_errors', 1);
; - 验证字符集配置是否正确避免乱码问题。
FAQs
Q1: PHP连接数据库时出现“Access denied”怎么办?
A: 此错误通常由以下原因导致:①提供的用户名/密码不正确;②该用户没有访问指定数据库的权限;③数据库服务器未允许远程连接(如果是远程主机的话),解决方法包括重置密码、授予适当权限(如GRANT ALL PRIVILEGES ON dbname. TO ‘user’@’host’;),以及确认是否启用了远程访问功能。
Q2: PDO与mysqli哪个性能更好?
A: 根据实际测试,两者在大多数场景下的性能差异微乎其微,选择依据应基于项目需求:如果需要跨数据库移植性或高级特性(如事务完整性检查),则优先选PDO;若仅需快速搭建MySQL应用且团队熟悉面向过程风格,可考虑mysqli,现代框架如Laravel、Symfony均内置对PDO的良好支持