上一篇
html和数据库增删改查
- 行业动态
- 2025-05-04
- 3243
HTML负责页面展示,数据库存储数据,增删改查需通过后端脚本(如PHP/Python)连接 数据库实现,HTML表单提交数据,后端执行SQL语句完成操作并
HTML与数据库交互基础
前端HTML设计
HTML负责展示数据和收集用户输入,常用表单元素与数据库字段对应:
- 输入框 (
<input>
) → 文本/数字字段 - 下拉框 (
<select>
) → 枚举类型字段 - 复选框 (
<checkbox>
) → 布尔类型字段 - 文本域 (
<textarea>
) → 长文本字段
后端数据库操作
通过服务器端语言(如PHP/Python/Node.js)连接数据库,典型流程:
- 建立连接:使用数据库驱动(如
mysqli
/pymysql
/sqlite3
) - SQL执行:
SELECT
→ 读取数据INSERT
→ 新增记录UPDATE
→ 修改记录DELETE
→ 删除记录
- 关闭连接:释放数据库资源
前后端数据交互
通过HTTP请求传递数据,常见方式:
| 技术 | 说明 | 示例 |
|—————-|———————————–|————————–|
| 表单提交 | method="POST"
提交键值对 | name=john&age=30
|
| AJAX请求 | 异步发送JSON数据 | fetch('/api', {body: JSON.stringify(data)})
|
| RESTful API | 通过URL路径表达资源 | GET /users/1
|
数据库CRUD操作示例(以MySQL为例)
创建(INSERT)
场景:用户注册时存储信息
HTML:
<form method="POST"> <input name="username" placeholder="用户名"> <input name="password" type="password" placeholder="密码"> <button>注册</button> </form>
PHP处理:
$conn = new mysqli('localhost', 'root', '', 'testdb'); $stmt = $conn->prepare("INSERT INTO users (username, password) VALUES (?, ?)"); $stmt->bind_param("ss", $_POST['username'], $_POST['password']); $stmt->execute();
读取(SELECT)
场景:展示用户列表
SQL:
SELECT id, username FROM users WHERE status = 'active';
Python处理:
cursor.execute("SELECT id, username FROM users WHERE status = %s", ('active',)) results = cursor.fetchall() # 返回 [(1, 'Alice'), (2, 'Bob')]
更新(UPDATE)
场景:修改用户资料
HTML:
<input name="email" value="old@email.com"> <button>更新邮箱</button>
Node.js处理:
const query = "UPDATE users SET email = ? WHERE id = ?"; connection.query(query, [req.body.email, req.body.id], (err, result) => { console.log(`更新了 ${result.affectedRows} 条记录`); });
删除(DELETE)
场景:注销用户账号
SQL:
DELETE FROM users WHERE id = 123;
Java处理:
String sql = "DELETE FROM users WHERE id = ?"; PreparedStatement pstmt = conn.prepareStatement(sql); pstmt.setInt(1, userId); pstmt.executeUpdate();
技术对比表格
特性 | PHP+MySQL | Python+SQLite | Node.js+MongoDB |
---|---|---|---|
数据库类型 | 关系型 | 关系型 | 文档型 |
连接方式 | mysqli 扩展 | sqlite3 模块 | mongodb 驱动 |
数据结构 | 严格Schema | 动态Schema | 无固定Schema |
适用场景 | 中型Web应用 | 小型项目/本地存储 | 高并发非结构化数据 |
相关问题与解答
Q1:如何防止SQL注入攻击?
A:
- 使用预处理语句(如
prepared statements
)代替字符串拼接 - 对用户输入进行类型校验(如整数转int、字符串转义)
- 限制数据库权限(如只开放SELECT/INSERT权限)
示例(PHP):$stmt = $conn->prepare("SELECT FROM users WHERE id = ?"); $stmt->bind_param("i", $_GET['id']); // 自动转义特殊字符 $stmt->execute();
Q2:如何处理多表关联查询?
A:
- 使用
JOIN
语句关联表(如INNER JOIN
/LEFT JOIN
) - 在代码中处理关联数据(如嵌套循环或对象映射)
示例(SQL):SELECT orders.id, users.name FROM orders INNER JOIN users ON orders.user_id = users.