php收藏功能实现
数据库设计
创建收藏表favorites,包含用户ID、收藏内容ID和收藏时间字段。示例SQL:
CREATE TABLE favorites (
id INT AUTO_INCREMENT PRIMARY KEY,
user_id INT NOT NULL,
item_id INT NOT NULL,
created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
FOREIGN KEY (user_id) REFERENCES users(id),
FOREIGN KEY (item_id) REFERENCES items(id)
);
添加收藏功能
创建收藏接口,处理用户提交的收藏请求。示例PHP代码:

function addFavorite($userId, $itemId) {
$pdo = new PDO('mysql:host=localhost;dbname=your_db', 'username', 'password');
$stmt = $pdo->prepare("INSERT INTO favorites (user_id, item_id) VALUES (?, ?)");
return $stmt->execute([$userId, $itemId]);
}
移除收藏功能
实现取消收藏的逻辑。示例代码:
function removeFavorite($userId, $itemId) {
$pdo = new PDO('mysql:host=localhost;dbname=your_db', 'username', 'password');
$stmt = $pdo->prepare("DELETE FROM favorites WHERE user_id = ? AND item_id = ?");
return $stmt->execute([$userId, $itemId]);
}
检查收藏状态
在页面显示时检查当前用户是否已收藏。示例代码:

function isFavorited($userId, $itemId) {
$pdo = new PDO('mysql:host=localhost;dbname=your_db', 'username', 'password');
$stmt = $pdo->prepare("SELECT COUNT(*) FROM favorites WHERE user_id = ? AND item_id = ?");
$stmt->execute([$userId, $itemId]);
return $stmt->fetchColumn() > 0;
}
前端交互实现
使用AJAX实现无刷新收藏操作。示例jQuery代码:
$('.favorite-btn').click(function() {
var itemId = $(this).data('item-id');
$.post('/favorite.php', {action: 'toggle', item_id: itemId}, function(response) {
if(response.status === 'added') {
$(this).addClass('active');
} else {
$(this).removeClass('active');
}
});
});
性能优化
对频繁访问的收藏数据使用缓存:
function getUserFavorites($userId) {
$cacheKey = "user_favorites_{$userId}";
if($cached = apc_fetch($cacheKey)) {
return $cached;
}
$pdo = new PDO('mysql:host=localhost;dbname=your_db', 'username', 'password');
$stmt = $pdo->prepare("SELECT item_id FROM favorites WHERE user_id = ?");
$stmt->execute([$userId]);
$result = $stmt->fetchAll(PDO::FETCH_COLUMN);
apc_store($cacheKey, $result, 3600);
return $result;
}






