PHP实现增删改查(CRUD)完整指南
在Web开发中,增删改查(CRUD,Create、Read、Update、Delete)是最核心的数据操作功能,PHP作为流行的后端语言,结合MySQL等数据库,能轻松实现CRUD操作,本文将从环境准备、数据库设计到具体代码实现,手把手教你用PHP完成增删改查功能。
环境准备与数据库设计
环境搭建
首先需要本地开发环境,推荐使用集成工具:
- XAMPP(Windows/Linux/macOS):集成Apache、MySQL、PHP,一键安装,适合新手。
- MAMP(macOS):类似XAMPP,专为macOS优化。
- Docker:通过容器化部署,适合需要环境一致性的开发者。
安装完成后,启动Apache和MySQL服务,确保PHP版本≥7.4(推荐8.0+以获得更好的性能和安全性)。
数据库设计
以“用户管理”为例,设计一个简单的users表,包含以下字段:
| 字段名 | 类型 | 说明 |
|---|---|---|
| id | int(11) | 主键,自增 |
| username | varchar(50) | 用户名 |
| varchar(100) | 邮箱 | |
| created_at | datetime | 创建时间 |
通过MySQL命令行或工具(如phpMyAdmin)创建表:
CREATE DATABASE `crud_db` DEFAULT CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci; USE `crud_db`; CREATE TABLE `users` ( `id` int(11) NOT NULL AUTO_INCREMENT, `username` varchar(50) NOT NULL, `email` varchar(100) NOT NULL, `created_at` datetime DEFAULT CURRENT_TIMESTAMP, PRIMARY KEY (`id`), UNIQUE KEY `email` (`email`) ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;
数据库连接配置
PHP操作数据库需要先建立连接,推荐使用 PDO(PHP Data Objects),它支持多种数据库(MySQL、PostgreSQL等),且更安全(支持预处理语句防止SQL注入)。
创建config.php文件,保存数据库连接信息:
<?php
$host = 'localhost';
$dbname = 'crud_db';
$username = 'root'; // MySQL默认用户名
$password = ''; // XAMPP默认密码为空
try {
$pdo = new PDO("mysql:host=$host;dbname=$dbname;charset=utf8mb4", $username, $password);
// 设置PDO错误模式为异常
$pdo->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
} catch (PDOException $e) {
die("数据库连接失败: " . $e->getMessage());
}
?>
实现“增删改查”(CRUD)功能
查询数据(Read)
查询数据是CRUD中最基础的操作,包括单条查询和列表查询。
(1)查询所有用户(列表)
创建read.php,展示用户列表:
<?php
require_once 'config.php';
try {
$stmt = $pdo->query("SELECT id, username, email, created_at FROM users ORDER BY created_at DESC");
$users = $stmt->fetchAll(PDO::FETCH_ASSOC);
} catch (PDOException $e) {
die("查询失败: " . $e->getMessage());
}
?>
<!DOCTYPE html>
<html lang="zh-CN">
<head>
<meta charset="UTF-8">用户列表</title>
<style>
table { width: 100%; border-collapse: collapse; }
th, td { border: 1px solid #ddd; padding: 8px; text-align: left; }
th { background-color: #f2f2f2; }
</style>
</head>
<body>
<h1>用户列表</h1>
<a href="create.php">添加用户</a>
<table>
<tr>
<th>ID</th>
<th>用户名</th>
<th>邮箱</th>
<th>创建时间</th>
<th>操作</th>
</tr>
<?php foreach ($users as $user): ?>
<tr>
<td><?= $user['id'] ?></td>
<td><?= htmlspecialchars($user['username']) ?></td>
<td><?= htmlspecialchars($user['email']) ?></td>
<td><?= $user['created_at'] ?></td>
<td>
<a href="edit.php?id=<?= $user['id'] ?>">编辑</a>
<a href="delete.php?id=<?= $user['id'] ?>" onclick="return confirm('确定删除吗?')">删除</a>
</td>
</tr>
<?php endforeach; ?>
</table>
</body>
</html>
(2)查询单个用户(编辑时使用)
在edit.php中需要先获取用户信息,可通过GET参数传递ID:
<?php
require_once 'config.php';
if (!isset($_GET['id']) || empty($_GET['id'])) {
die("ID不能为空");
}
$id = $_GET['id'];
try {
$stmt = $pdo->prepare("SELECT id, username, email FROM users WHERE id = ?");
$stmt->execute([$id]);
$user = $stmt->fetch(PDO::FETCH_ASSOC);
if (!$user) {
die("用户不存在");
}
} catch (PDOException $e) {
die("查询失败: " . $e->getMessage());
}
?>
创建数据(Create)
创建create.php,包含表单提交和数据插入逻辑:
(1)表单页面(create.php)
<!DOCTYPE html>
<html lang="zh-CN">
<head>
<meta charset="UTF-8">添加用户</title>
</head>
<body>
<h1>添加用户</h1>
<form action="store.php" method="post">
<div>
<label for="username">用户名:</label>
<input type="text" id="username" name="username" required>
</div>
<div>
<label for="email">邮箱:</label>
<input type="email" id="email" name="email" required>
</div>
<button type="submit">提交</button>
<a href="read.php">返回列表</a>
</form>
</body>
</html>
(2)处理提交数据(store.php)
<?php
require_once 'config.php';
if ($_SERVER['REQUEST_METHOD'] !== 'POST') {
die("非法请求");
}
$username = trim($_POST['username']);
$email = trim($_POST['email']);
// 数据验证
if (empty($username) || empty($email)) {
die("用户名和邮箱不能为空");
}
if (!filter_var($email, FILTER_VALIDATE_EMAIL)) {
die("邮箱格式不正确");
}
// 检查邮箱是否已存在
try {
$stmt = $pdo->prepare("SELECT id FROM users WHERE email = ?");
$stmt->execute([$email]);
if ($stmt->fetch()) {
die("邮箱已存在");
}
} catch (PDOException $e) {
die("查询失败: " . $e->getMessage());
}
// 插入数据
try {
$stmt = $pdo->prepare("INSERT INTO users (username, email) VALUES (?, ?)");
$stmt->execute([$username, $email]);
header("Location: read.php"); // 重定向到列表页
exit;
} catch (PDOException $e) {
die("插入失败: " . $e->getMessage());
}
?>
更新数据(Update)
更新操作分为“显示编辑表单”和“提交更新”两步。
(1)编辑表单(edit.php)
<!DOCTYPE html>
<html lang="zh-CN">
<head>
<meta charset="UTF-8">编辑用户</title>
</head>
<body>
<h1>编辑用户</h1>
<form action="update.php" method="post">
<input type="hidden" name="id" value="<?= $user['id'] ?>">
<div>
<label for="username">用户名:</label>
<input type="text" id="username" name="username" value="<?= htmlspecialchars($user['username']) ?>" required>
</div>
<div>
<label for="email">邮箱:</label>
<input type="email" id="email" name="email" value="<?= htmlspecialchars($user['email']) ?>" required>
</div>
<button type="submit">更新</button>
<a href="read.php">返回列表</a>
</form>
</body>
</html>
(2)处理更新数据(update.php)
<?php
require_once 'config.php';
if ($_SERVER['REQUEST_METHOD'] !== 'POST') {
die


还没有评论,来说两句吧...