CRUD Operations using PHP & MySQL | Tutorials with Source Code
Yes, I’d say a large percentage of most applications I’ve worked on is basic CRUD(Create, Read, Update, Delete) operations. Especially In any Web Application, you need to repeat the CRUD Operations for every object in your system.
For creating beautiful & responsive UI, I’m using AdminLTE Template. So, In case if you missed the first part of this Tutorial, then you can find here => Getting Started with Web Application using PHP & MySQL | Tutorials
Assuming that you have followed the above tutorial & setup your project, let’s start our CRUD Operations Tutorial using PHP & MySQL.
I’m performing my CRUD Operation on this Database Table. You can use your own Table.
Creating Folders
- First of all, create a new folder at the root of your project directory as “api”.
- Inside “api” folder create three folders as “config”, “objects” & “doctors”.
we’ll keep all Doctor API inside “doctors” folder.
This directory structure will help us to keep our project easy to manage.
Database Connectivity
In your “config” folder inside “api” folder, create a new file there as “database.php” and paste this code there
<?php class Database{ // specify your own database credentials private $host = "localhost"; private $db_name = "hospital_db"; private $username = "root"; private $password = ""; public $conn; // get the database connection public function getConnection(){ $this->conn = null; try{ $this->conn = new PDO("mysql:host=" . $this->host . ";dbname=" . $this->db_name, $this->username, $this->password); $this->conn->exec("set names utf8"); }catch(PDOException $exception){ echo "Connection error: " . $exception->getMessage(); } return $this->conn; } } ?>
Now, your project structure should look like this.
Let’s start from creating API for CRUD operations.
I’m going to use Object Oriented Approach in this tutorial.
First of all, create a Model of your Doctor.
So, create a new file as “doctor.php” inside “objects” folder & add this Code:
<?php class Doctor{ // database connection and table name private $conn; private $table_name = "doctors"; // object properties public $id; public $name; public $email; public $password; public $phone; public $gender; public $specialist; public $created; // constructor with $db as database connection public function __construct($db){ $this->conn = $db; } // read all doctors function read(){ // select all query $query = "SELECT `id`, `name`, `email`, `password`, `phone`, `gender`, `specialist`, `created` FROM " . $this->table_name . " ORDER BY id DESC"; // prepare query statement $stmt = $this->conn->prepare($query); // execute query $stmt->execute(); return $stmt; } // get single doctor data function read_single(){ // select all query $query = "SELECT `id`, `name`, `email`, `password`, `phone`, `gender`, `specialist`, `created` FROM " . $this->table_name . " WHERE id= '".$this->id."'"; // prepare query statement $stmt = $this->conn->prepare($query); // execute query $stmt->execute(); return $stmt; } // create doctor function create(){ if($this->isAlreadyExist()){ return false; } // query to insert record $query = "INSERT INTO ". $this->table_name ." (`name`, `email`, `password`, `phone`, `gender`, `specialist`, `created`) VALUES ('".$this->name."', '".$this->email."', '".$this->password."', '".$this->phone."', '".$this->gender."', '".$this->specialist."', '".$this->created."')"; // prepare query $stmt = $this->conn->prepare($query); // execute query if($stmt->execute()){ $this->id = $this->conn->lastInsertId(); return true; } return false; } // update doctor function update(){ // query to insert record $query = "UPDATE " . $this->table_name . " SET name='".$this->name."', email='".$this->email."', password='".$this->password."', phone='".$this->phone."', gender='".$this->gender."', specialist='".$this->specialist."' WHERE id='".$this->id."'"; // prepare query $stmt = $this->conn->prepare($query); // execute query if($stmt->execute()){ return true; } return false; } // delete doctor function delete(){ // query to insert record $query = "DELETE FROM " . $this->table_name . " WHERE id= '".$this->id."'"; // prepare query $stmt = $this->conn->prepare($query); // execute query if($stmt->execute()){ return true; } return false; } function isAlreadyExist(){ $query = "SELECT * FROM " . $this->table_name . " WHERE email='".$this->email."'"; // prepare query statement $stmt = $this->conn->prepare($query); // execute query $stmt->execute(); if($stmt->rowCount() > 0){ return true; } else{ return false; } } }
you can see that we have all CRUD Operations including read_single function for reading a single Doctor record from MySQL database table.
Now, we’ll create a separate file for each operation inside “doctor” folder & we’ll call functions from “doctor.php” inside “objects” folder.
Let’s create a file inside “doctor” folder as “create.php” for creating a new doctor & add the below code inside this file.
<?php // include database and object files include_once '../config/database.php'; include_once '../objects/doctor.php'; // get database connection $database = new Database(); $db = $database->getConnection(); // prepare doctor object $doctor = new Doctor($db); // set doctor property values $doctor->name = $_POST['name']; $doctor->email = $_POST['email']; $doctor->password = base64_encode($_POST['password']); $doctor->phone = $_POST['phone']; $doctor->gender = $_POST['gender']; $doctor->specialist = $_POST['specialist']; $doctor->created = date('Y-m-d H:i:s'); // create the doctor if($doctor->create()){ $doctor_arr=array( "status" => true, "message" => "Successfully Signup!", "id" => $doctor->id, "name" => $doctor->name, "email" => $doctor->email, "phone" => $doctor->phone, "gender" => $doctor->gender, "specialist" => $doctor->specialist ); } else{ $doctor_arr=array( "status" => false, "message" => "Email already exists!" ); } print_r(json_encode($doctor_arr)); ?>
For reading all records from Doctors table create a file as “read.php” & add this code
<?php // include database and object files include_once '../config/database.php'; include_once '../objects/doctor.php'; // get database connection $database = new Database(); $db = $database->getConnection(); // prepare doctor object $doctor = new Doctor($db); // query doctor $stmt = $doctor->read(); $num = $stmt->rowCount(); // check if more than 0 record found if($num>0){ // doctors array $doctors_arr=array(); $doctors_arr["doctors"]=array(); while ($row = $stmt->fetch(PDO::FETCH_ASSOC)){ extract($row); $doctor_item=array( "id" => $id, "name" => $name, "email" => $email, "password" => $password, "phone" => $phone, "gender" => $gender, "specialist" => $specialist, "created" => $created ); array_push($doctors_arr["doctors"], $doctor_item); } echo json_encode($doctors_arr["doctors"]); } else{ echo json_encode(array()); } ?>
to Update a record, create a file as “update.php” & add the code below
<?php // include database and object files include_once '../config/database.php'; include_once '../objects/doctor.php'; // get database connection $database = new Database(); $db = $database->getConnection(); // prepare doctor object $doctor = new Doctor($db); // set doctor property values $doctor->id = $_POST['id']; $doctor->name = $_POST['name']; $doctor->email = $_POST['email']; $doctor->password = base64_encode($_POST['password']); $doctor->phone = $_POST['phone']; $doctor->gender = $_POST['gender']; $doctor->specialist = $_POST['specialist']; // create the doctor if($doctor->update()){ $doctor_arr=array( "status" => true, "message" => "Successfully Updated!" ); } else{ $doctor_arr=array( "status" => false, "message" => "Email already exists!" ); } print_r(json_encode($doctor_arr)); ?>
& for the last letter of CRUD, which is D.
create another file as “delete.php” & add this code
<?php // include database and object files include_once '../config/database.php'; include_once '../objects/doctor.php'; // get database connection $database = new Database(); $db = $database->getConnection(); // prepare doctor object $doctor = new Doctor($db); // set doctor property values $doctor->id = $_POST['id']; // remove the doctor if($doctor->delete()){ $doctor_arr=array( "status" => true, "message" => "Successfully Removed!" ); } else{ $doctor_arr=array( "status" => false, "message" => "Doctor Cannot be deleted. may be he's assigned to a patient!" ); } print_r(json_encode($doctor_arr)); ?>
in the end, we need another method which is to get a single doctor record.
So, create a new file as “read_single.php” & add the below code
<?php // include database and object files include_once '../config/database.php'; include_once '../objects/doctor.php'; // get database connection $database = new Database(); $db = $database->getConnection(); // prepare doctor object $doctor = new Doctor($db); // set ID property of doctor to be edited $doctor->id = isset($_GET['id']) ? $_GET['id'] : die(); // read the details of doctor to be edited $stmt = $doctor->read_single(); if($stmt->rowCount() > 0){ // get retrieved row $row = $stmt->fetch(PDO::FETCH_ASSOC); // create array $doctor_arr=array( "id" => $row['id'], "name" => $row['name'], "email" => $row['email'], "password" => $row['password'], "phone" => $row['phone'], "gender" => $row['gender'], "specialist" => $row['specialist'], "created" => $row['created'] ); } // make it json format print_r(json_encode($doctor_arr)); ?>
After this our “api” directory will look like this
Our API for CRUD Operation is ready using PHP & MySQL. Now, we need to create UI using the template we set up in the previous article & then connect our UI with the API we created in this article.
We’ll create UI for our CRUD Operations in the next part of this Article.
Comment If you find any difficulty, I’m available to solve your problems.
Hi
Hope you well.
I am busy with your medibed tutorial, but I cant find the bower_components and dist files when I download the adminlte template.
Regards
Ravi
when i click submit button in add doctor page, it shows that “localhost says undefined”. please advice to me resolve it.