上一篇
html用php连接数据库连接
- 行业动态
- 2025-04-29
- 4209
使用PHP的mysqli或PDO扩展实现HTML与数据库交互:通过mysqli_connect()或new PDO()建立连接,编写SQL语句操作数据,配合html表单接收参数,执行后用fetch处理结果集,记得用try-catch处理异常并释放
数据库配置说明
使用 PHP 连接数据库前,需确保已创建数据库并获取连接信息,以下是典型的数据库配置参数:
参数 | 说明 | 示例值 |
---|---|---|
主机名 | 数据库服务器地址(本地为localhost ) | 0.0.1 |
用户名 | 数据库登录账号 | root |
密码 | 数据库登录密码 | password123 |
数据库名 | 需连接的数据库名称 | test_db |
端口号 | MySQL默认端口为3306 | 3306 |
PHP连接数据库的步骤
使用 PDO 扩展连接数据库
优势:支持多种数据库(如 MySQL、PostgreSQL)、安全性高、支持预处理语句。
<?php // 数据库配置 $host = '127.0.0.1'; $dbname = 'test_db'; $username = 'root'; $password = 'password123'; $port = 3306; try { // DSN(数据源名称)格式:mysql:host=地址;port=端口;dbname=数据库名 $dsn = "mysql:host=$host;port=$port;dbname=$dbname"; // 创建 PDO 实例并连接数据库 $pdo = new PDO($dsn, $username, $password, [ PDO::ATTR_ERRMODE => PDO::ERRMODE_EXCEPTION, // 启用异常模式 PDO::ATTR_DEFAULT_FETCH_MODE => PDO::FETCH_ASSOC // 返回关联数组 ]); echo "数据库连接成功!"; } catch (PDOException $e) { // 捕获连接错误 die("数据库连接失败:" . $e->getMessage()); } ?>
使用 MySQLi 扩展连接数据库
优势:专为 MySQL 优化,性能较好。
<?php // 数据库配置 $host = '127.0.0.1'; $dbname = 'test_db'; $username = 'root'; $password = 'password123'; $port = 3306; // 创建 MySQLi 对象并连接数据库 $mysqli = new MySQLi($host, $username, $password, $dbname, $port); // 检查连接是否成功 if ($mysqli->connect_error) { die("数据库连接失败:" . $mysqli->connect_error); } else { echo "数据库连接成功!"; } ?>
执行 SQL 查询与结果处理
示例:查询用户表数据
<?php // 假设已通过 PDO 或 MySQLi 连接数据库(以 PDO 为例) $sql = "SELECT FROM users"; // SQL 语句 // 执行查询 $stmt = $pdo->query($sql); // 处理结果集 while ($row = $stmt->fetch()) { // 输出每行数据(关联数组形式) echo "ID: {$row['id']}, 姓名: {$row['name']}<br>"; } ?>
常见错误与解决方案
问题 | 原因 | 解决方案 |
---|---|---|
“无法连接数据库” | 配置参数错误、数据库服务未启动 | 检查主机名、端口、用户名、密码 |
“未定义的 PDO 驱动” | 未安装或启用 PDO 扩展 | 在 php.ini 中启用 pdo_mysql |
“SQL 语法错误” | SQL 语句书写错误 | 检查 SQL 语法或使用预处理语句 |
注意事项
- 安全性:避免在代码中硬编码密码,可使用环境变量或配置文件存储敏感信息。
- 字符编码:设置数据库和 PHP 的字符编码一致(如
utf8mb4
),避免中文乱码。 - 关闭连接:操作完成后,及时关闭数据库连接(如
$pdo = null;
或$mysqli->close();
)。
相关问题与解答
问题 1:PDO 和 MySQLi 如何选择?
解答:
- 若需支持多种数据库(如 PostgreSQL、SQLite),优先选择 PDO。
- 若仅针对 MySQL 且追求性能,可选择 MySQLi。
- PDO 提供统一的接口,适合复杂项目;MySQLi 对 MySQL 特有功能支持更好。
问题 2:如何防止 SQL 注入攻击?
解答:
- 使用预处理语句:通过绑定参数而非直接拼接 SQL。
// PDO 示例 $stmt = $pdo->prepare("SELECT FROM users WHERE id = ?"); $stmt->execute([$id]);
- 验证用户输入:对输入数据进行类型、长度、格式检查。
- 最小权限原则:数据库账号仅授予必要权限(如只读