上一篇
html与数据库连接代码
- 行业动态
- 2025-05-07
- 3927
HTML需通过服务器端脚本(如PHP)连接数据库,示例代码包含配置主机、用户名、密码及数据库名,使用PDO或mysqli扩展建立连接,建议采用预处理语句防范SQL注入风险。(
数据库准备
使用MySQL数据库,创建测试表users
,结构如下:
字段名 | 类型 | 说明 |
---|---|---|
id | INT AUTO_INCREMENT | 主键自增 |
name | VARCHAR(50) | 用户名 |
VARCHAR(100) | 邮箱地址 |
CREATE DATABASE testdb; USE testdb; CREATE TABLE users ( id INT AUTO_INCREMENT PRIMARY KEY, name VARCHAR(50) NOT NULL, email VARCHAR(100) NOT NULL );
PHP连接数据库代码
<?php // 数据库配置 $host = 'localhost'; // 数据库服务器地址 $user = 'root'; // 数据库用户名 $pass = 'password'; // 数据库密码 $dbname = 'testdb'; // 数据库名称 $charset = 'utf8mb4'; // 字符编码 // 建立连接(面向过程方式) $conn = mysqli_connect($host, $user, $pass, $dbname); if (!$conn) { die('连接失败: ' . mysqli_connect_error()); } // 设置字符编码 mysqli_set_charset($conn, $charset); echo "数据库连接成功<br>"; ?>
HTML表单与数据处理
表单页面(insert.html)
<form method="post" action="process.php"> 姓名: <input type="text" name="name" required><br> 邮箱: <input type="email" name="email" required><br> <button type="submit">提交</button> </form>
处理逻辑(process.php)
<?php // 引入数据库连接文件 require_once 'db_config.php'; // 假设连接代码保存在该文件 // 获取表单数据并过滤 $name = htmlspecialchars($_POST['name']); $email = filter_var($_POST['email'], FILTER_VALIDATE_EMAIL); // 数据插入(使用预处理语句防注入) $stmt = $conn->prepare("INSERT INTO users (name, email) VALUES (?, ?)"); if ($stmt) { $stmt->bind_param("ss", $name, $email); // 绑定参数类型s=string if ($stmt->execute()) { echo "数据插入成功,ID: " . $stmt->insert_id; } else { echo "插入失败: " . $stmt->error; } $stmt->close(); } else { echo "预处理失败: " . $conn->error; } $conn->close(); ?>
数据读取与显示
查询页面(read.php)
<?php require_once 'db_config.php'; // 引入连接配置 // 查询所有用户 $result = $conn->query("SELECT FROM users"); if ($result) { echo "<table border='1'><tr><th>ID</th><th>姓名</th><th>邮箱</th></tr>"; while ($row = $result->fetch_assoc()) { echo "<tr><td>{$row['id']}</td><td>{$row['name']}</td><td>{$row['email']}</td></tr>"; } echo "</table>"; $result->free(); } else { echo "查询失败: " . $conn->error; } $conn->close(); ?>
错误处理与安全配置
风险类型 | 解决方案 |
---|---|
SQL注入 | 使用预处理语句(prepare/bind_param) |
密码明文存储 | 改用哈希算法(如password_hash())存储密码 |
字符乱码 | 设置数据库字符集为utf8mb4,并在连接时指定charset参数 |
错误信息泄露 | 生产环境禁用错误详细输出,使用自定义错误页面 |
测试案例
- 插入测试:提交表单
name=张三&email=zhangsan@example.com
,检查数据库是否生成新记录。 - 查询测试:访问
read.php
,验证表格是否正确显示所有用户数据。
相关问题与解答
Q1: 为什么推荐使用预处理语句?
A1: 预处理语句将SQL语句与数据分离,由数据库预编译SQL结构,避免反面数据改动语句逻辑,输入name=张三' OR '1'='1
时,预处理机制会自动识别为字符串而非SQL片段。
Q2: 页面出现中文乱码怎么办?
A2: 需确保三个环节的编码一致:
- 数据库设置:
ALTER DATABASE testdb CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;
- 连接设置:
mysqli_set_charset($conn, 'utf8mb4');
- HTML页面声明:`<meta charset=”