In this tutorial, You will learn to create the CRUD operation rest API using PHP & MySQL which will be very useful to integrate with frontend languages such as react js, angular js & more.
Step to Create Crud Restful API in PHP & MYSQL
Now, Let’s start coding with the given some simple steps –
Create a Folder Structure
First of all, Create the following folder structure in your system.
- database.php – This file is created for the database connection
- api.php – This file is created for the API requests such as post, put, get & delete.
- CrudApi.php – This file is created for writing code with a custom class for crud operation
crud-opration/
|_rest/
| |__database.php
| |__CrudApi.ph[
|__api.php
Create Database & Table
Now, Create a database & Table in the PhpMyAdmin the the following given name –
Database Name – restapi
CREATE DATABASE restapi
Table Name – developers
CREATE TABLE `developers` ( `id` int(10) UNSIGNED PRIMARY KEY NOT NULL AUTO_INCREMENT, `firstName` varchar(255) DEFAULT NULL, `lastName` varchar(255) DEFAULT NULL, `gender` varchar(10) DEFAULT NULL, `salary` decimal(10,2) DEFAULT NULL, )
Connect to Database
No, Connect your PHP to the MySQL database with this code.
File Name – database.php
<?php
$host = "localhost";
$user = "root";
$password = "";
$database = "phprestapi";
$conn = new mysqli($host, $user, $password, $database);
if ($conn->connect_error) {
die("Connection failed: " . $conn->connect_error);
}
?>
Create CRUD API Class
File Name – CrudApi.php
<?php
class CrudApi {
private $conn;
private $categoryTable;
public function __construct($conn) {
$this->conn = $conn;
$this->tableName = 'crud';
}
public function validate($firstName, $lastName, $gender, $salary) {
$error = false;
$errMsg = null;
if(empty($firstName)) {
$errMsg = "FirstName is empty";
$error = true;
}
if(empty($lastName)) {
$errMsg = "LastName is empty";
$error = true;
}
if(empty($gender)) {
$errMsg = "gender is empty";
$error = true;
}
if(empty($salary)) {
$errMsg = "salary is empty";
$error = true;
}
$errorInfo = [
"error" => $error,
"errMsg" => $errMsg
];
return $errorInfo;
}
public function create() {
$data = json_decode(file_get_contents("php://input"), true);
$firstName = $data['firstName'];
$lastName = $data['lastName'];
$gender = $data['gender'];
$salary = $data['salary'];
$validate = $this->validate($firstName, $lastName, $gender, $salary);
$success = false;
if (!$validate['error']){
$query = "INSERT INTO ";
$query .= $this->tableName;
$query .= " (firstName, lastName, gender, salary) ";
$query .= " VALUES (?,?,?,?)";
$stmt = $this->conn->prepare($query);
$stmt->bind_param("sssi", $firstName, $lastName, $gender, $salary);
if ($stmt->execute()) {
$status = 200;
$msg = "Data is created successfully";
} else{
$status = 400;
$msg = $this->conn->error;
}
} else {
$status = 401;
$msg = $validate['errMsg'];
}
$data = [
'status' => $status,
'msg' => $msg,
'data' => $data
];
return json_encode($data);
}
public function get() {
$data = [];
$query = "SELECT id, firstName, lastName, gender, salary FROM ";
$query .= $this->tableName;
$query .= " ORDER BY id DESC";
$result = $this->conn->query($query);
if ($result) {
while ($row = $result->fetch_assoc()) {
$data[] = $row;
}
$result->free();
}
if(empty($data)) {
$data = [
'status' => 404,
'data' => 'Recod not found'
];
} else {
$data = [
'status' => 200,
'data' => $data
];
}
return json_encode($data);
}
public function getById($id) {
$data = [];
$query = "SELECT id, firstName, lastName, gender, salary FROM ";
$query .= $this->tableName;
$query .= " WHERE id=?";
$stmt = $this->conn->prepare($query);
$stmt->bind_param("i", $id);
if ($stmt->execute()) {
$result = $stmt->get_result();
$rows= $result->fetch_assoc();
if($rows) {
$status = 200;
$data = $rows;
} else {
$status = 404;
$data = "Record not found";
}
}
$data = [
'status' => $status,
'data' => $data
];
return json_encode($data);
}
public function updateById($id) {
$data = json_decode(file_get_contents("php://input"), true);
$firstName = $data['firstName'];
$lastName = $data['lastName'];
$gender = $data['gender'];
$salary = $data['salary'];
$validate = $this->validate($firstName, $lastName, $gender, $salary);
$success = false;
if (!$validate['error']){
$query = "UPDATE ";
$query .= $this->tableName;
$query .= " SET firstName = ?, lastName = ?, gender = ?, salary = ? ";
$query .= " WHERE id = ?";
$stmt = $this->conn->prepare($query);
$stmt->bind_param("sssii", $firstName, $lastName, $gender, $salary, $id);
if ($stmt->execute()) {
$status = 200;
$msg = "Data is updated successfully";
} else{
$status = 400;
$msg = $this->conn->error;
}
} else {
$status = 401;
$msg = $validate['errMsg'];
}
$data = [
'status' => $status,
'msg' => $msg,
'data' => $data
];
return json_encode($data);
}
public function deleteById($id) {
$getData = $this->getById($id);
$rows = json_decode($getData, true);
if(404 == $rows['status']){
return $getData;
} else {
$query = "DELETE FROM ";
$query .= $this->tableName;
$query .= " WHERE id = ?";
$stmt = $this->conn->prepare($query);
$stmt->bind_param("i", $id);
echo "dddd";
if ($stmt->execute()) {
$data = [
'status' => 200,
'msg' => 'Record is deleted successfully',
'data' => $rows['data']
];
return json_encode($data);
}
}
}
}
?>
Create CRUD API Action
File Name – api.php
<?php
require_once 'database.php';
require_once 'CrudApi.php';
$crudApi = new CrudApi($conn);
header("Access-Control-Allow-Origin: *");
header("Access-Control-Allow-Methods: POST, PUT, GET, DELETE, OPTIONS");
header("Access-Control-Allow-Headers: Content-Type");
header("Content-Type: application/json");
if ($_SERVER['REQUEST_METHOD'] === 'OPTIONS') {
http_response_code(200);
exit();
}
// HTTP method handling
$method = $_SERVER['REQUEST_METHOD'];
switch ($method) {
case 'GET':
// Read data
$id = isset($_GET['id']) ? $_GET['id'] : null;
if($id){
echo $crudApi->getById($id);
} else {
echo $crudApi->get();
}
break;
case 'POST':
echo $crudApi->create();
break;
case 'PUT':
$id = isset($_GET['id']) ? $_GET['id'] : null;
if($id) {
echo $crudApi->updateById($id);
} else {
echo "Request URL not found";
}
break;
case 'DELETE':
// Delete data
$id = isset($_GET['id']) ? $_GET['id'] : null;
if($id) {
echo $crudApi->deleteById($id);
} else {
echo "Request URL not found";
}
break;
default:
header('HTTP/1.0 405 Method Not Allowed');
break;
}
?>
Run CRUD API With Postman
Now, open your Postman, and run the following API request
For creating records –
method – POST
URL
http://localhost/codingstatus/php/rest/crud-operations/api.php
Payload – JSON data
{
"firstName": "Jhon",
"lastName": "Doe",
"gender": "male",
"salary": "45"
}
For getting records
method – GET
URL –
http://localhost/codingstatus/php/rest/crud-operations/api.php
For updating recored
method – PUT
URL –
http://localhost/codingstatus/php/rest/crud-operations/api.php?id=46
Payload – JSON Data
{
"firstName": "Amit",
"lastName": "Kumar",
"gender": "male",
"salary": "123"
}
For Deleting Record –
Method – DELETE
URL –
http://localhost/codingstatus/php/rest/crud-operations/api.php?id=46