Appearance
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 dalamAPI. Setiap endpoint memiliki tugas khusus, seperti membaca data, membuat data, menghapus data, atau mengupdate data.Metode HTTP:APImenggunakan metode HTTP (GET,POST,PUT,DELETE) untuk menentukan tindakan yang ingin diambil pada sumber daya tertentu. Misalnya, metodeGETdigunakan untuk membaca data, sedangkanPOSTdigunakan untuk membuat data baru.Format Data: Data yang dikirim dan diterima melaluiAPIbiasanya dalam format tertentu, sepertiJSON(JavaScript Object Notation) atauXML(eXtensible Markup Language). Format ini memungkinkan data mudah dipahami oleh mesin.
Header
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-Typedigunakan untuk menentukan jenis konten dari data yang dikirim dalam permintaan API. Ini menginformasikan server tentang format data yang dikirim. contohContent-Type: application/jsonAcceptdigunakan untuk menentukan jenis konten yang dapat diterima oleh klien dalam respons. Ini membantu server dalam menghasilkan respons sesuai dengan preferensi klien. contohAccept: application/jsonAuthorizationdigunakan untuk mengirim token otentikasi atau kredensial pengguna ke server. Ini diperlukan dalam banyak kasusAPIyang 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.phpdanDatabase.php - pada file
index.phpkita akan memanggil fileDatabase.phpdengan perintahrequire "Database.php" $db = new Database();inisiasi class DatabaseDatabase.phppada file ini kita akan membuat kode untuk melakukan koneksi kedatabasedengan mamanggil classmysqlidengan parameter:host: diisi dengan ip dari machine letak databaseusername:usernamedaridatabase, defaultusernamedarimysqlbiasa rootpassword:passwordyang di set untukdatabasemysqldatabase: namadatabaseyang 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
CategoryProductke classDatabase, untuk mengambil koneksi kedatabase
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.phpclass dengan require - inisiasi
CategoryProductclass - mengembalikan header dengan
application/json - menyimpan data ke table
product_categoriesmelalui methodstore()diCategoryProductclass, 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.phpclass dengan require - inisiasi
CategoryProductclass - mengembalikan header dengan
application/json - memanggil semua data di tabel
product_categoriesmelalui methodfindAll()yang ada diCategoryProductclass
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.phpclass dengan require - menampung variable id yang di kirim dari url, dengan sintaks
$_GET['id'] - inisiasi
CategoryProductclass - memanggil method
update()untuk memperbaharui data di tabelproduct_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.phpclass dengan require - menampung variable id yang di kirim dari url, dengan sintaks
$_GET['id'] - inisiasi
CategoryProductclass - memanggil method
delete()untuk menghapus data di tabelproduct_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
CategoryProductuntuk proses CRUD ke tabelproduct_categories - Method
findAll()mengembalikan semua baris dari hasil query. - Method
insert()menambahkan data kategori produk dengan nama yang diinputkan melaluiPOSTrequest. - Method
update()memperbarui data kategori produk dengan nama yang diinputkan melaluiPOSTrequest dan dengan ID yang diinputkan melaluiURL. - Method
delete()menghapus data kategori produk dengan ID yang diinputkan melaluiURL. $stmt->bind_param("si", $_POST['name'], $id)parameter pertama pada methodbind_paramsi, yang di maksud disini type data dari parameter yang akan kita masukan,s = string,i = integer