php 实现 好友
PHP 实现好友系统
数据库设计
创建必要的数据库表来存储用户和好友关系。通常需要 users 表和 friends 表。
CREATE TABLE users (
id INT AUTO_INCREMENT PRIMARY KEY,
username VARCHAR(50) NOT NULL,
email VARCHAR(100) NOT NULL
);
CREATE TABLE friends (
id INT AUTO_INCREMENT PRIMARY KEY,
user_id INT NOT NULL,
friend_id INT NOT NULL,
status ENUM('pending', 'accepted', 'rejected') DEFAULT 'pending',
FOREIGN KEY (user_id) REFERENCES users(id),
FOREIGN KEY (friend_id) REFERENCES users(id)
);
发送好友请求
使用 PHP 处理发送好友请求的逻辑。确保用户不能重复发送请求。
function sendFriendRequest($userId, $friendId) {
global $pdo;
$stmt = $pdo->prepare("INSERT INTO friends (user_id, friend_id, status) VALUES (?, ?, 'pending')");
$stmt->execute([$userId, $friendId]);
return $stmt->rowCount() > 0;
}
接受或拒绝好友请求
提供接口让用户处理收到的请求。
function respondToFriendRequest($userId, $friendId, $status) {
global $pdo;
$stmt = $pdo->prepare("UPDATE friends SET status = ? WHERE user_id = ? AND friend_id = ?");
$stmt->execute([$status, $friendId, $userId]);
return $stmt->rowCount() > 0;
}
获取好友列表
查询已接受的好友关系,返回用户的好友列表。
function getFriendsList($userId) {
global $pdo;
$stmt = $pdo->prepare("
SELECT u.id, u.username
FROM friends f
JOIN users u ON u.id = f.friend_id
WHERE f.user_id = ? AND f.status = 'accepted'
UNION
SELECT u.id, u.username
FROM friends f
JOIN users u ON u.id = f.user_id
WHERE f.friend_id = ? AND f.status = 'accepted'
");
$stmt->execute([$userId, $userId]);
return $stmt->fetchAll(PDO::FETCH_ASSOC);
}
检查好友状态
验证两个用户之间是否存在好友关系及其状态。
function checkFriendStatus($userId, $friendId) {
global $pdo;
$stmt = $pdo->prepare("SELECT status FROM friends WHERE user_id = ? AND friend_id = ?");
$stmt->execute([$userId, $friendId]);
return $stmt->fetchColumn();
}
删除好友
允许用户移除好友关系。
function removeFriend($userId, $friendId) {
global $pdo;
$stmt = $pdo->prepare("DELETE FROM friends WHERE (user_id = ? AND friend_id = ?) OR (user_id = ? AND friend_id = ?)");
$stmt->execute([$userId, $friendId, $friendId, $userId]);
return $stmt->rowCount() > 0;
}
实现注意事项
确保所有数据库操作使用预处理语句防止 SQL 注入。
验证用户权限,确保用户只能操作自己的好友关系。
考虑添加索引优化查询性能,特别是在 friends 表的 user_id 和 friend_id 字段。

扩展功能
添加好友请求通知系统。 实现好友推荐算法基于共同好友或兴趣。 支持好友分组或标签管理。






