php实现借阅图书
实现借阅图书的PHP代码示例
以下是一个简单的PHP实现借阅图书功能的代码示例,包含数据库操作和基本逻辑。

数据库表结构
需要创建两个基本表:books(图书表)和borrow_records(借阅记录表)。

CREATE TABLE books (
id INT AUTO_INCREMENT PRIMARY KEY,
title VARCHAR(255) NOT NULL,
author VARCHAR(255),
isbn VARCHAR(20),
available_copies INT DEFAULT 1,
total_copies INT DEFAULT 1
);
CREATE TABLE borrow_records (
id INT AUTO_INCREMENT PRIMARY KEY,
book_id INT,
user_id INT,
borrow_date DATETIME DEFAULT CURRENT_TIMESTAMP,
return_date DATETIME,
status ENUM('borrowed', 'returned') DEFAULT 'borrowed',
FOREIGN KEY (book_id) REFERENCES books(id)
);
借阅功能实现
<?php
// 数据库连接
$db = new PDO('mysql:host=localhost;dbname=library', 'username', 'password');
function borrowBook($bookId, $userId) {
global $db;
// 检查图书是否可借
$stmt = $db->prepare("SELECT available_copies FROM books WHERE id = ?");
$stmt->execute([$bookId]);
$book = $stmt->fetch(PDO::FETCH_ASSOC);
if (!$book || $book['available_copies'] < 1) {
return "图书不可借";
}
// 开始事务
$db->beginTransaction();
try {
// 减少可用副本数
$stmt = $db->prepare("UPDATE books SET available_copies = available_copies - 1 WHERE id = ?");
$stmt->execute([$bookId]);
// 创建借阅记录
$stmt = $db->prepare("INSERT INTO borrow_records (book_id, user_id, status) VALUES (?, ?, 'borrowed')");
$stmt->execute([$bookId, $userId]);
$db->commit();
return "借阅成功";
} catch (Exception $e) {
$db->rollBack();
return "借阅失败: " . $e->getMessage();
}
}
// 使用示例
$result = borrowBook(1, 123); // 借阅ID为1的图书,用户ID为123
echo $result;
?>
归还功能实现
function returnBook($recordId) {
global $db;
// 开始事务
$db->beginTransaction();
try {
// 获取借阅记录
$stmt = $db->prepare("SELECT book_id FROM borrow_records WHERE id = ? AND status = 'borrowed'");
$stmt->execute([$recordId]);
$record = $stmt->fetch(PDO::FETCH_ASSOC);
if (!$record) {
return "无效的借阅记录";
}
// 更新图书可用副本数
$stmt = $db->prepare("UPDATE books SET available_copies = available_copies + 1 WHERE id = ?");
$stmt->execute([$record['book_id']]);
// 更新借阅记录状态
$stmt = $db->prepare("UPDATE borrow_records SET status = 'returned', return_date = NOW() WHERE id = ?");
$stmt->execute([$recordId]);
$db->commit();
return "归还成功";
} catch (Exception $e) {
$db->rollBack();
return "归还失败: " . $e->getMessage();
}
}
安全增强措施
在实际应用中,应增加以下安全措施:
// 输入验证
function validateInput($input) {
return htmlspecialchars(strip_tags(trim($input)));
}
// 防止SQL注入
$bookId = filter_var($_POST['book_id'], FILTER_VALIDATE_INT);
if ($bookId === false) {
die("无效的图书ID");
}
// 用户认证
session_start();
if (!isset($_SESSION['user_id'])) {
die("请先登录");
}
$userId = $_SESSION['user_id'];
前端表单示例
简单的HTML借阅表单:
<form action="borrow.php" method="post">
<input type="hidden" name="book_id" value="<?php echo $bookId; ?>">
<button type="submit">借阅图书</button>
</form>
这个实现包含了基本的借阅和归还功能,使用了事务确保数据一致性,并提供了简单的安全措施。实际应用中可能需要根据具体需求进行扩展,如添加借阅期限、逾期处理等功能。






