BORROW CRUD
The borrow table contains:
text
borrow_id
student_id
book_id
borrow_date
borrow_return_date
students and books, the borrow table uses foreign keys.
text
borrow.student_id
|
v
students.student_id
text
borrow.book_id
|
v
books.book_id
text
CREATE → Borrow a book
READ → View borrow records
UPDATE → Return a book
DELETE → Delete borrow record
4.1 CREATE Borrow
Use Case
The user selects:
text
Student
Book
text
Borrow
Step 1: Get Students
The form needs a list of students.SQL
sql
SELECT
student_id,
student_first_name,
student_last_name
FROM students
ORDER BY student_last_name, student_first_name;
PHP
php
$stmt = $pdo->query("
SELECT
student_id,
student_first_name,
student_last_name
FROM students
ORDER BY student_last_name, student_first_name
");
$students = $stmt->fetchAll();
<select>.
---
Step 2: Get Books
The form also needs a list of books.SQL
sql
SELECT
book_id,
book_title,
book_author
FROM books
ORDER BY book_title;
PHP
php
$stmt = $pdo->query("
SELECT
book_id,
book_title,
book_author
FROM books
ORDER BY book_title
");
$books = $stmt->fetchAll();
Step 3: Get Selected IDs
The form submits:
php
$studentId = (int) ($_POST['student_id'] ?? 0);
$bookId = (int) ($_POST['book_id'] ?? 0);
text
student_id = 1
book_id = 2
text
Student #1
|
+---- borrowed ----> Book #2
Step 4: INSERT Borrow Record
SQL
sql
INSERT INTO borrow (
student_id,
book_id
)
VALUES (?, ?);
PHP
php
$stmt = $pdo->prepare("
INSERT INTO borrow (
student_id,
book_id
)
VALUES (?, ?)
");
$stmt->execute([
$studentId,
$bookId
]);
text
borrow_id
borrow_date
sql
borrow_id INT AUTO_INCREMENT
sql
borrow_date TIMESTAMP DEFAULT CURRENT_TIMESTAMP
4.2 READ Borrow Records
Use Case
Display the borrow history. A basic:
sql
SELECT *
FROM borrow;
text
borrow_id | student_id | book_id
JOIN.
---
SQL Query
sql
SELECT
borrow.borrow_id,
borrow.borrow_date,
borrow.borrow_return_date,
students.student_first_name,
students.student_last_name,
books.book_title,
books.book_author
FROM borrow
INNER JOIN students
ON borrow.student_id = students.student_id
INNER JOIN books
ON borrow.book_id = books.book_id
ORDER BY borrow.borrow_id DESC;
PHP PDO
php
$stmt = $pdo->query("
SELECT
borrow.borrow_id,
borrow.borrow_date,
borrow.borrow_return_date,
students.student_first_name,
students.student_last_name,
books.book_title,
books.book_author
FROM borrow
INNER JOIN students
ON borrow.student_id = students.student_id
INNER JOIN books
ON borrow.book_id = books.book_id
ORDER BY borrow.borrow_id DESC
");
$borrowRecords = $stmt->fetchAll();
Understanding the JOIN
The first relationship is:
sql
INNER JOIN students
ON borrow.student_id = students.student_id
text
borrow.student_id
↓
students.student_id
sql
INNER JOIN books
ON borrow.book_id = books.book_id
text
borrow.book_id
↓
books.book_id
text
Borrow ID | Student | Book
----------|---------------------|------------------
1 | CLIFF EVANGELIO | Jurassic Park
2 | JAN EVANGELIO | Project Hail Mary
3 | RON EVANGELIO | 1984
4.3 UPDATE Borrow — Return Book
For the borrow table, the Update operation is used to mark a book as returned. Initially:
text
borrow_return_date = NULL
text
borrow_return_date = current timestamp
Get Borrow ID
php
$borrowId = (int) ($_GET['id'] ?? 0);
text
index.php?section=borrow&action=return&id=1
SQL Query
sql
UPDATE borrow
SET borrow_return_date = CURRENT_TIMESTAMP
WHERE borrow_id = ?;
PHP PDO
php
$stmt = $pdo->prepare("
UPDATE borrow
SET borrow_return_date = CURRENT_TIMESTAMP
WHERE borrow_id = ?
");
$stmt->execute([
$borrowId
]);
Before Return
text
borrow_id: 1
borrow_date: 2026-09-15 10:00:00
borrow_return_date: NULL
text
Borrowed
After Return
text
borrow_id: 1
borrow_date: 2026-09-15 10:00:00
borrow_return_date: 2026-09-15 15:30:00
text
Returned
4.4 DELETE Borrow Record
Use Case
The user deletes a borrow record. ---SQL Query
sql
DELETE FROM borrow
WHERE borrow_id = ?;
PHP PDO
php
$borrowId = (int) ($_GET['id'] ?? 0);
$stmt = $pdo->prepare("
DELETE FROM borrow
WHERE borrow_id = ?
");
$stmt->execute([
$borrowId
]);
4.5 Determine Borrow Status
The application does not need a separatestatus column.
Instead, it checks:
php
if ($borrow['borrow_return_date']) {
echo "Returned";
} else {
echo "Borrowed";
}
text
borrow_return_date
|
+---- NULL
| |
| v
| Borrowed
|
+---- Has timestamp
|
v
Returned
4.6 Borrow CRUD Summary
text
| CRUD | Operation | SQL |
|---|---|---|
| Create | Borrow book | `INSERT` |
| Read | View borrow history | `SELECT + JOIN` |
| Update | Return book | `UPDATE` |
| Delete | Delete borrow record | `DELETE` |
Sign in to save your progress permanently.
Progress is saved in your browser session
Step 5 of 9