Skip to content

Meeting 9

pada pertemuan kali ini, kita akan membahas bagaimana melakukan koneksi dari PHP ke database MySQL, Koneksi PHP ke database MySQL memungkinkan untuk berinteraksi dengan basis data MySQL dari aplikasi web PHP. Sebelum kita melakukan koneksi ke database alangkah baik nya kita belajar tentang API

API

API (Application Programming Interface) adalah seperangkat aturan dan protokol yang memungkinkan aplikasi perangkat lunak untuk berkomunikasi satu sama lain. API digunakan untuk mengizinkan integrasi antara berbagai aplikasi, sistem, atau layanan, sehingga mereka dapat berinteraksi dan berbagi data.

Komponen Utama API:
  • Endpoints: Endpoints adalah URL yang digunakan untuk mengakses sumber daya tertentu dalam API. Setiap endpoint memiliki tugas khusus, seperti membaca data, membuat data, menghapus data, atau mengupdate data.

  • Metode HTTP: API menggunakan metode HTTP (GET, POST, PUT, DELETE) untuk menentukan tindakan yang ingin diambil pada sumber daya tertentu. Misalnya, metode GET digunakan untuk membaca data, sedangkan POST digunakan untuk membuat data baru.

  • Format Data: Data yang dikirim dan diterima melalui API biasanya dalam format tertentu, seperti JSON (JavaScript Object Notation) atau XML (eXtensible Markup Language). Format ini memungkinkan data mudah dipahami oleh mesin.

Header HTTP dalam konteks API adalah bagian dari permintaan (request) yang digunakan untuk mengirim informasi tambahan kepada server atau penerima API. Informasi ini membantu dalam mengelola permintaan dan mengatur cara data ditangani.

Beberapa header API yang umum digunakan:
  • Content-Type digunakan untuk menentukan jenis konten dari data yang dikirim dalam permintaan API. Ini menginformasikan server tentang format data yang dikirim. contoh Content-Type: application/json
  • Accept digunakan untuk menentukan jenis konten yang dapat diterima oleh klien dalam respons. Ini membantu server dalam menghasilkan respons sesuai dengan preferensi klien. contoh Accept: application/json
  • Authorization digunakan untuk mengirim token otentikasi atau kredensial pengguna ke server. Ini diperlukan dalam banyak kasus API yang memerlukan otentikasi.

Koneksi ke Database MySQL

Untuk melakukan koneksi ke MySQL dari PHP, kita bisa menggunakan MySQLi atau PDO, jawaban pendek kita harus menggunakan yang mana adalah "Pakai manapun yang kamu suka", MySQLi hanya bisa di gunakan untuk koneksi ke MySQL saja, sementara PDO bisa di gunakan di 12 database yang berbeda, karna kita akan menggunakan database MySQL, pada kali ini kita akan menggunakan MySQLi dan melakukan koneksi ke database yang sebelumnya sudah kita buat markplace

php
<?php

require "Database.php";

$db = new Database();
<?php

require "Database.php";

$db = new Database();
php
<?php

class Database {
    private $host     = 'localhost';
    private $username = 'root';
    private $password = '';
    private $database = 'markplace';
    private $connection;

    public function __construct() {
        $connect = new mysqli(
            $this->host,
            $this->username,
            $this->password,
            $this->database
        );

        if ($connect->connect_error) {
            die("Koneksi gagal:  {$connect->connect_error}");
        }

        $this->connection = $connect;

        echo "Berhasil terkoneksi";
    }

    public function connection() {
        return $this->connection;
    }
}
<?php

class Database {
    private $host     = 'localhost';
    private $username = 'root';
    private $password = '';
    private $database = 'markplace';
    private $connection;

    public function __construct() {
        $connect = new mysqli(
            $this->host,
            $this->username,
            $this->password,
            $this->database
        );

        if ($connect->connect_error) {
            die("Koneksi gagal:  {$connect->connect_error}");
        }

        $this->connection = $connect;

        echo "Berhasil terkoneksi";
    }

    public function connection() {
        return $this->connection;
    }
}
Penjelasan Code
  • buatlah dua file dengan nama index.php dan Database.php
  • pada file index.php kita akan memanggil file Database.php dengan perintah require "Database.php"
  • $db = new Database(); inisiasi class Database
  • Database.php pada file ini kita akan membuat kode untuk melakukan koneksi ke database dengan mamanggil class mysqli dengan parameter:
    • host: diisi dengan ip dari machine letak database
    • username: username dari database, default username dari mysql biasa root
    • password: password yang di set untuk database mysql
    • database: nama database yang sudah kita buat

CRUD ke Database MySQL

kita akan coba melakukan DML, ke tabel product_categories namun pada kali ini kita akan melakukannya melalui PHP, sehingga kita bisa memanipulasi data dari aplikasi yang kita buat, buat file baru dengan nama CategoryProduct.php.

php
<?php

class CategoryProduct extends Database
{
    private $table = 'product_categories';
    // 
}
<?php

class CategoryProduct extends Database
{
    private $table = 'product_categories';
    // 
}
Penjelasan Code
  • Membuat file baru dengan nama CategoryProduct.php.
  • membuat class CategoryProduct
  • extend class CategoryProduct ke class Database, untuk mengambil koneksi ke database

Insert Data Dari PHP

Buatlah file baru dengan nama store.php, kita akan menambah data di tabel product_categories tambahkan method baru dengan nama insert() baru di class CategoryProduct. API dapat diakses melalui endpoint BASE_URL/store.php

php
<?php

require "CategoryProduct.php";

header('Content-Type: application/json');
try {
    $category = new CategoryProduct();
    $category->insert();

    echo json_encode([
        'message' => 'success'
    ]);
} catch (\Exception $e) {
    echo json_encode([
        'message' => $e->getMessage()
    ]); 
}
<?php

require "CategoryProduct.php";

header('Content-Type: application/json');
try {
    $category = new CategoryProduct();
    $category->insert();

    echo json_encode([
        'message' => 'success'
    ]);
} catch (\Exception $e) {
    echo json_encode([
        'message' => $e->getMessage()
    ]); 
}
php
public function insert()
{
    $sql = "INSERT INTO {$this->table} (name) VALUES (?)";
    $stmt =  $this->connection()->prepare($sql);
    $stmt->bind_param("s", $_POST['name']);
    $stmt->execute();
}
public function insert()
{
    $sql = "INSERT INTO {$this->table} (name) VALUES (?)";
    $stmt =  $this->connection()->prepare($sql);
    $stmt->bind_param("s", $_POST['name']);
    $stmt->execute();
}
Penjelasan Code
  • Membuat file baru dengan nama store.php.
  • import CategoryProduct.php class dengan require
  • inisiasi CategoryProduct class
  • mengembalikan header dengan application/json
  • menyimpan data ke table product_categories melalui method store() di CategoryProduct class, jika berhasil maka akan terlihat pesan success

Select Data Dari PHP

kali ini kita akan menampilkan semua data yang ada pada tabel product_categories, buatlah file baru dengan index.php dan menambahkan method baru di class CategoryProduct, API dapat diakses melalui endpoint BASE_URL/index.php

php
<?php

require "CategoryProduct.php";

header('Content-Type: application/json');
try {
    $category = new CategoryProduct();
    $categories = $category->findAll();

    echo json_encode([
        'data' => $categories
    ]);
} catch (\Exception $e) {
    echo json_encode([
        'message' => $e->getMessage()
    ]); 
}
<?php

require "CategoryProduct.php";

header('Content-Type: application/json');
try {
    $category = new CategoryProduct();
    $categories = $category->findAll();

    echo json_encode([
        'data' => $categories
    ]);
} catch (\Exception $e) {
    echo json_encode([
        'message' => $e->getMessage()
    ]); 
}
php
public function findAll(): array
{
    $sql = "SELECT * FROM {$this->table}";
    $result = $this->connection()->query($sql);

    if ($result->num_rows > 0) {
        $categories = [];

        while ($row = $result->fetch_assoc()) {
            $categories[] = $row;
        }

        return $categories;
    } else {
        return [];
    }
}
public function findAll(): array
{
    $sql = "SELECT * FROM {$this->table}";
    $result = $this->connection()->query($sql);

    if ($result->num_rows > 0) {
        $categories = [];

        while ($row = $result->fetch_assoc()) {
            $categories[] = $row;
        }

        return $categories;
    } else {
        return [];
    }
}
Penjelasan Code
  • Membuat file baru dengan nama index.php.
  • import CategoryProduct.php class dengan require
  • inisiasi CategoryProduct class
  • mengembalikan header dengan application/json
  • memanggil semua data di tabel product_categories melalui method findAll() yang ada di CategoryProduct class

Update Data Dari PHP

Untuk memperbarui data dari PHP, pada class CategoryProduct tambahkan method baru dengan nama method update(), dan buatlah file baru untuk endpoint API dengan nama file update.php. API dapat diakses melalui endpoint BASE_URL/update.php?id=ID_DATA_PRODUCT_CATEGORIES

php
<?php

require "CategoryProduct.php";

header('Content-Type: application/json');
try {
    $id = $_GET['id'];
    $category = new CategoryProduct();
    $category->update($id);

    echo json_encode([
        'message' => 'success'
    ]);
} catch (\Exception $e) {
    echo json_encode([
        'message' => $e->getMessage()
    ]); 
}
<?php

require "CategoryProduct.php";

header('Content-Type: application/json');
try {
    $id = $_GET['id'];
    $category = new CategoryProduct();
    $category->update($id);

    echo json_encode([
        'message' => 'success'
    ]);
} catch (\Exception $e) {
    echo json_encode([
        'message' => $e->getMessage()
    ]); 
}
php
public function update(int $id)
{
    $sql = "UPDATE {$this->table} SET name = ? WHERE id = ?";
    $stmt =  $this->connection()->prepare($sql);
    $stmt->bind_param("si", $_POST['name'], $id);
    $stmt->execute();
}
public function update(int $id)
{
    $sql = "UPDATE {$this->table} SET name = ? WHERE id = ?";
    $stmt =  $this->connection()->prepare($sql);
    $stmt->bind_param("si", $_POST['name'], $id);
    $stmt->execute();
}
Penjelasan Code
  • membuat file baru untuk endpoint update, dengan nama update.php
  • import CategoryProduct.php class dengan require
  • menampung variable id yang di kirim dari url, dengan sintaks $_GET['id']
  • inisiasi CategoryProduct class
  • memanggil method update() untuk memperbaharui data di tabel product_categories
  • method update() membutuhkan paramter id untuk mengupdate data yang akan di perbaharui.

Delete Data Dari PHP

Pada kali ini kita akan membuat method untuk menghapus data di tabel product_categories, pada class CategoryProduct tambahkan method baru dengan nama method delete(), dan buatlah file baru untuk endpoint API dengan nama file delete.php. API dapat diakses melalui endpoint BASE_URL/delete.php?id=ID_DATA_PRODUCT_CATEGORIES

php
<?php

require "CategoryProduct.php";

header('Content-Type: application/json');
try {
    $id = $_GET['id'];
    $category = new CategoryProduct();
    $category->delete($id);

    echo json_encode([
        'message' => 'success'
    ]);
} catch (\Exception $e) {
    echo json_encode([
        'message' => $e->getMessage()
    ]); 
}
<?php

require "CategoryProduct.php";

header('Content-Type: application/json');
try {
    $id = $_GET['id'];
    $category = new CategoryProduct();
    $category->delete($id);

    echo json_encode([
        'message' => 'success'
    ]);
} catch (\Exception $e) {
    echo json_encode([
        'message' => $e->getMessage()
    ]); 
}
php
public function delete(int $id)
{
    $sql = "DELETE FROM {$this->table} WHERE id = ?";
    $stmt =  $this->connection()->prepare($sql);
    $stmt->bind_param("i", $id);
    $stmt->execute();
}
public function delete(int $id)
{
    $sql = "DELETE FROM {$this->table} WHERE id = ?";
    $stmt =  $this->connection()->prepare($sql);
    $stmt->bind_param("i", $id);
    $stmt->execute();
}
Penjelasan Code
  • membuat file baru untuk endpoint delete data, dengan nama delete.php
  • import CategoryProduct.php class dengan require
  • menampung variable id yang di kirim dari url, dengan sintaks $_GET['id']
  • inisiasi CategoryProduct class
  • memanggil method delete() untuk menghapus data di tabel product_categories
  • method delete() membutuhkan paramter id untuk mengahpus data.
Code Lengkap CategoryProduct
php
<?php

require "Database.php";

class CategoryProduct extends Database
{
    private $table = 'product_categories';

    // select data
    public function findAll(): array
    {
        $sql = "SELECT * FROM {$this->table}";
        $result = $this->connection()->query($sql);

        if ($result->num_rows > 0) {
            $categories = [];

            while ($row = $result->fetch_assoc()) {
                $categories[] = $row;
            }

            return $categories;
        } else {
            return [];
        }
    }

    // add data 
    public function insert()
    {
        $sql = "INSERT INTO {$this->table} (name) VALUES (?)";
        $stmt =  $this->connection()->prepare($sql);
        $stmt->bind_param("s", $_POST['name']);
        $stmt->execute();
    }

    // update data
    public function update(int $id)
    {
        $sql = "UPDATE {$this->table} SET name = ? WHERE id = ?";
        $stmt =  $this->connection()->prepare($sql);
        $stmt->bind_param("si", $_POST['name'], $id);
        $stmt->execute();
    }

    // delete data
    public function delete(int $id)
    {
        $sql = "DELETE FROM {$this->table} WHERE id = ?";
        $stmt =  $this->connection()->prepare($sql);
        $stmt->bind_param("i", $id);
        $stmt->execute();
    }
}
<?php

require "Database.php";

class CategoryProduct extends Database
{
    private $table = 'product_categories';

    // select data
    public function findAll(): array
    {
        $sql = "SELECT * FROM {$this->table}";
        $result = $this->connection()->query($sql);

        if ($result->num_rows > 0) {
            $categories = [];

            while ($row = $result->fetch_assoc()) {
                $categories[] = $row;
            }

            return $categories;
        } else {
            return [];
        }
    }

    // add data 
    public function insert()
    {
        $sql = "INSERT INTO {$this->table} (name) VALUES (?)";
        $stmt =  $this->connection()->prepare($sql);
        $stmt->bind_param("s", $_POST['name']);
        $stmt->execute();
    }

    // update data
    public function update(int $id)
    {
        $sql = "UPDATE {$this->table} SET name = ? WHERE id = ?";
        $stmt =  $this->connection()->prepare($sql);
        $stmt->bind_param("si", $_POST['name'], $id);
        $stmt->execute();
    }

    // delete data
    public function delete(int $id)
    {
        $sql = "DELETE FROM {$this->table} WHERE id = ?";
        $stmt =  $this->connection()->prepare($sql);
        $stmt->bind_param("i", $id);
        $stmt->execute();
    }
}
Penjelasan Code
  • Class CategoryProduct untuk proses CRUD ke tabel product_categories
  • Method findAll() mengembalikan semua baris dari hasil query.
  • Method insert() menambahkan data kategori produk dengan nama yang diinputkan melalui POST request.
  • Method update() memperbarui data kategori produk dengan nama yang diinputkan melalui POST request dan dengan ID yang diinputkan melalui URL.
  • Method delete() menghapus data kategori produk dengan ID yang diinputkan melalui URL.
  • $stmt->bind_param("si", $_POST['name'], $id) parameter pertama pada method bind_param si, yang di maksud disini type data dari parameter yang akan kita masukan, s = string, i = integer