Notice: Function _load_textdomain_just_in_time was called incorrectly. Translation loading for the health-check domain was triggered too early. This is usually an indicator for some code in the plugin or theme running too early. Translations should be loaded at the init action or later. Please see Debugging in WordPress for more information. (This message was added in version 6.7.0.) in /home/yogisv5/sitesbyyogi.com/wp-includes/functions.php on line 6260
MODULE 9: PHP + MySQL Database Integration - SitesByYogi

StreetGeek Academy · PHP Foundations

🧩 Module 9: PHP + MySQL Database Integration

Objective: Learn how to connect PHP to a MySQL database, run queries, and create a functional
app that saves and displays information dynamically.

🔹 1. What Is a Database?

A database stores structured data that can be easily searched, updated, and managed.
MySQL is the most popular open-source relational database — and it pairs perfectly with PHP (the “M” in the LAMP stack).

You’ll use it to store:

  • User profiles
  • Posts or messages
  • Product data
  • Form submissions

🔹 2. Setting Up MySQL Locally

If you’re using LocalWP, XAMPP, or MAMP, you already have MySQL installed.

🔧 Accessing phpMyAdmin

  • Visit: http://localhost/phpmyadmin
  • Click New
  • Name it streetgeek_db
  • Click Create

Then, inside it, create a new table named tasks:

Column Type Length Attributes
id INT 11 PRIMARY KEY, AUTO_INCREMENT
title VARCHAR 255
status VARCHAR 50 Default = pending

🔹 3. Connecting PHP to MySQL

You can connect using either the MySQLi extension or PDO.
We’ll start with MySQLi, which is simple and great for beginners.

<?php
$servername = "localhost";
$username   = "root";  // default for local
$password   = "";      // blank by default
$database   = "streetgeek_db";

$conn = new mysqli($servername, $username, $password, $database);

if ($conn->connect_error) {
    die("Connection failed: " . $conn->connect_error);
}
echo "✅ Connected successfully!";
?>

✅ If you see “Connected successfully!”, your connection works.

🔹 4. Inserting Data into the Database

<?php
$conn = new mysqli("localhost", "root", "", "streetgeek_db");

$title  = "Learn PHP MySQL Integration";
$status = "pending";

$sql = "INSERT INTO tasks (title, status) VALUES ('$title', '$status')";
if ($conn->query($sql) === TRUE) {
    echo "New record created successfully!";
} else {
    echo "Error: " . $conn->error;
}

$conn->close();
?>

✅ Check phpMyAdmin → streetgeek_db → tasks — you’ll see your new row.

🔹 5. Reading Data from the Database

<?php
$conn = new mysqli("localhost", "root", "", "streetgeek_db");

$sql    = "SELECT * FROM tasks";
$result = $conn->query($sql);

if ($result->num_rows > 0) {
    echo "<h2>Task List</h2>";
    while ($row = $result->fetch_assoc()) {
        echo "ID: " . $row["id"] . " — " .
             $row["title"] . " (" . $row["status"] . ")<br>";
    }
} else {
    echo "No tasks found.";
}
$conn->close();
?>

✅ Displays all rows from your tasks table.

🔹 6. Updating Data

<?php
$conn = new mysqli("localhost", "root", "", "streetgeek_db");

$sql = "UPDATE tasks SET status='completed' WHERE id=1";
if ($conn->query($sql) === TRUE) {
    echo "Task updated successfully!";
} else {
    echo "Error updating record: " . $conn->error;
}

$conn->close();
?>

✅ Changes status of task with ID = 1 to completed.

🔹 7. Deleting Data

<?php
$conn = new mysqli("localhost", "root", "", "streetgeek_db");

$sql = "DELETE FROM tasks WHERE id=2";
if ($conn->query($sql) === TRUE) {
    echo "Task deleted successfully!";
} else {
    echo "Error deleting record: " . $conn->error;
}

$conn->close();
?>

✅ Deletes record with ID = 2.

🔹 8. Using Prepared Statements (Security Best Practice)

To protect your database from SQL Injection, always use prepared statements.

<?php
$conn = new mysqli("localhost", "root", "", "streetgeek_db");

$stmt = $conn->prepare("INSERT INTO tasks (title, status) VALUES (?, ?)");
$stmt->bind_param("ss", $title, $status);

$title  = "Complete PHP Module 9";
$status = "pending";
$stmt->execute();

echo "Data inserted safely!";

$stmt->close();
$conn->close();
?>

🧠 bind_param("ss", ...) uses:

  • s = string
  • i = integer
  • d = double

🔹 9. Building a CRUD Interface

Now let’s connect everything with a form-driven mini-app.

Create task-manager.php:

<?php
$conn = new mysqli("localhost", "root", "", "streetgeek_db");

// Handle form submission
if ($_SERVER["REQUEST_METHOD"] == "POST") {
    $title = htmlspecialchars($_POST["title"]);
    $stmt  = $conn->prepare("INSERT INTO tasks (title, status) VALUES (?, 'pending')");
    $stmt->bind_param("s", $title);
    $stmt->execute();
}

// Display tasks
$result = $conn->query("SELECT * FROM tasks");
?>
<h2>Task Manager</h2>

<form method="POST" action="">
  <input type="text" name="title" placeholder="New Task" required>
  <input type="submit" value="Add Task">
</form>

<hr>
<h3>Current Tasks:</h3>
<?php
if ($result->num_rows > 0) {
    while ($row = $result->fetch_assoc()) {
        echo $row["id"] . ". " . $row["title"] .
             " — " . $row["status"] . "<br>";
    }
} else {
    echo "No tasks yet.";
}
$conn->close();
?>

✅ You can add tasks from the form and instantly see them below.

🧾 Module 9 Quiz

# Question Options Correct
1 What does MySQL store? a) Files · b) Structured data · c) PHP code b
2 Which function connects PHP to MySQL? a) connect() · b) mysqli_connect() · c) mysql() b
3 What is a prepared statement used for? a) Faster execution · b) SQL Injection prevention · c) Formatting output b
4 What does CRUD stand for? a) Create, Read, Update, Delete · b) Connect, Run, Upload, Download · c) Compile, Run, Debug a
5 Which SQL command deletes records? a) REMOVE · b) DELETE · c) DROP b

💪 Challenge Task – Task List App (Full CRUD)

Objective: Build a fully functional Task Manager with create, view, update, and delete features.

Features:

  • Add new tasks
  • Mark tasks as completed
  • Delete tasks
  • Display all tasks in a styled HTML table

Steps:

  • Create database streetgeek_db → table tasks (id, title, status).
  • Create tasks-crud.php.
  • Combine all the operations:
<?php
$conn = new mysqli("localhost", "root", "", "streetgeek_db");

// Create
if (isset($_POST["add"])) {
    $title = htmlspecialchars($_POST["title"]);
    $stmt  = $conn->prepare("INSERT INTO tasks (title, status) VALUES (?, 'pending')");
    $stmt->bind_param("s", $title);
    $stmt->execute();
}

// Update (mark completed)
if (isset($_GET["complete"])) {
    $id = (int) $_GET["complete"];
    $conn->query("UPDATE tasks SET status='completed' WHERE id=$id");
}

// Delete
if (isset($_GET["delete"])) {
    $id = (int) $_GET["delete"];
    $conn->query("DELETE FROM tasks WHERE id=$id");
}

$result = $conn->query("SELECT * FROM tasks");
?>
<h2>StreetGeek Task List</h2>

<form method="POST" action="">
  <input type="text" name="title" placeholder="New task" required>
  <input type="submit" name="add" value="Add Task">
</form>

<table border="1" cellpadding="8" cellspacing="0" style="margin-top:10px;">
  <tr><th>ID</th><th>Title</th><th>Status</th><th>Actions</th></tr>
  <?php while ($row = $result->fetch_assoc()): ?>
    <tr>
      <td><?php echo $row["id"]; ?></td>
      <td><?php echo htmlspecialchars($row["title"]); ?></td>
      <td><?php echo $row["status"]; ?></td>
      <td>
        <a href="?complete=<?php echo $row["id"]; ?>">✅ Complete</a> |
        <a href="?delete=<?php echo $row["id"]; ?>">🗑 Delete</a>
      </td>
    </tr>
  <?php endwhile; ?>
</table>
<?php $conn->close(); ?>

✅ You’ve now created your first full CRUD application using PHP + MySQL.

🧾 Submission Checklist

  • insert-task.php → adds data correctly
  • view-tasks.php → displays records
  • update-task.php → updates successfully
  • delete-task.php → removes records
  • task-manager.php or tasks-crud.php → full CRUD interface
  • ✅ Quiz completed

🏁 Next Step: In Module 10, you’ll go beyond data management to build user sessions and
authentication systems — learning how to keep users logged in, track activity, and create login/logout systems
just like professional sites and WordPress itself.