php实现借书
实现借书功能的PHP代码示例
以下是一个简单的PHP实现借书功能的代码示例,包含数据库操作和基本逻辑验证。
数据库准备 创建包含用户、书籍和借阅记录的表结构:

CREATE TABLE users (
id INT AUTO_INCREMENT PRIMARY KEY,
name VARCHAR(100) NOT NULL
);
CREATE TABLE books (
id INT AUTO_INCREMENT PRIMARY KEY,
title VARCHAR(255) NOT NULL,
author VARCHAR(100),
available BOOLEAN DEFAULT TRUE
);
CREATE TABLE borrow_records (
id INT AUTO_INCREMENT PRIMARY KEY,
user_id INT NOT NULL,
book_id INT NOT NULL,
borrow_date DATETIME DEFAULT CURRENT_TIMESTAMP,
return_date DATETIME,
FOREIGN KEY (user_id) REFERENCES users(id),
FOREIGN KEY (book_id) REFERENCES books(id)
);
借书功能实现
<?php
// 数据库连接
$db = new PDO('mysql:host=localhost;dbname=library', 'username', 'password');
function borrowBook($userId, $bookId) {
global $db;
// 检查用户是否存在
$stmt = $db->prepare("SELECT id FROM users WHERE id = ?");
$stmt->execute([$userId]);
if (!$stmt->fetch()) {
return "用户不存在";
}
// 检查书籍是否存在且可借
$stmt = $db->prepare("SELECT available FROM books WHERE id = ?");
$stmt->execute([$bookId]);
$book = $stmt->fetch();
if (!$book) {
return "书籍不存在";
}
if (!$book['available']) {
return "书籍已被借出";
}
// 开始事务
$db->beginTransaction();
try {
// 更新书籍状态
$stmt = $db->prepare("UPDATE books SET available = FALSE WHERE id = ?");
$stmt->execute([$bookId]);
// 创建借阅记录
$stmt = $db->prepare("INSERT INTO borrow_records (user_id, book_id) VALUES (?, ?)");
$stmt->execute([$userId, $bookId]);
$db->commit();
return "借书成功";
} catch (Exception $e) {
$db->rollBack();
return "借书失败: " . $e->getMessage();
}
}
// 示例调用
$result = borrowBook(1, 5); // 用户ID为1借阅书籍ID为5
echo $result;
?>
功能扩展建议
添加借阅限制 可以在用户表中添加最大借阅数量字段,并在借书前检查:

$stmt = $db->prepare("SELECT COUNT(*) as count FROM borrow_records WHERE user_id = ? AND return_date IS NULL");
$stmt->execute([$userId]);
$borrowed = $stmt->fetch()['count'];
$stmt = $db->prepare("SELECT max_borrow FROM users WHERE id = ?");
$stmt->execute([$userId]);
$maxBorrow = $stmt->fetch()['max_borrow'];
if ($borrowed >= $maxBorrow) {
return "已达到最大借阅数量";
}
添加借阅期限 在创建借阅记录时设置预计归还日期:
$dueDate = date('Y-m-d H:i:s', strtotime('+30 days'));
$stmt = $db->prepare("INSERT INTO borrow_records (user_id, book_id, due_date) VALUES (?, ?, ?)");
$stmt->execute([$userId, $bookId, $dueDate]);
安全注意事项
使用预处理语句防止SQL注入 验证所有输入参数 添加适当的错误处理 考虑使用try-catch块处理数据库异常 对敏感操作实施权限检查
这个实现提供了基本的借书功能,可以根据实际需求进一步扩展和完善。






