Belajar PHP Data Object
PHP Data Object atau biasa dikenal dengan PDO adalah PHP Extension yang hadir sejak PHP versi 5.1 yang lebih konsisten untuk mengatur antarmuka database di dalam di PHP.
Share
PHP Data Object atau biasa dikenal dengan PDO adalah PHP Extension yang hadir sejak PHP v5.1
yang lebih konsisten untuk mengatur antarmuka database di dalam di PHP.
Anda tidak dapat menjalankan fungsi basis data apa pun menggunakan ekstensi PDO sendiri. Extensi ini akan tetap mengharapkan yang namanya driver yang mendukung untuk di koneksikan ke database dengan fungsi dasar yang dimilikinya.
Drivers
Ada beberapa database driver untuk PDO yang bisa kita gunakan di antaranya adalah:
- CUBRID
- MS SQL Server
- Firebird
- IBM
- Informix
- MySQL
- MS SQL Server
- Oracle
- ODBC and DB2
- PostgreSQL
- SQLite
Pertama, saya akan menunjukkan bagaimana cara melihat driver yang Anda miliki saat ini untuk menggunakan koneksi PDO ini. Pertama sekali, persiapkan 1 folder yang namanya learn-pdo
, di dalamnya kita buat 1 file dengan nama index.php
. Dan harusnya, kurang lebih strukturnya akan seperti ini:
. └── index.php
bashCopy
Sekarang, silakan buka file index.php
untuk kemudian menulis kode yang menampilkan driver nya seperti:
<?php print_r(PDO::getAvailableDrivers()); # output # Array ( [0] => dblib [1] => mysql [2] => odbc [3] => pgsql [4] => sqlite )
phpCopy
Perhatikan output dari syntax di atas, mungkin tidak sama dengan yang Anda miliki, tetapi saya yakin Anda pasti punya mysql
/ sqilte
. Jadi untuk general aja, saya akan memakai mysql disni.
Connection
Silakan buat 1 file lagi dengan nama connection.php
, dan sekarang harusnya kita sudah punya 2 file yaitu index.php
dan connection.php
. Buka file connection.php
dan buat koneksi ke database dengan menggunakan extensi pdo ini.
<?php $pdo = new PDO(dsn: 'mysql:host=localhost;dbname=learn_pdo', username: 'root', password: '');
phpCopy
Kemudian, silakan masukkan file connection.php
ke dalam index.php
seperti:
1<?php 2 3require_once 'connection.php'; 4
phpCopy
Dan sekarang buka terminal Anda, pastikan Anda sedang di dalam folder yang sedang kita kerjakan ini. Dan jalankan built-in web server php nya seperti:
php -S localhost:8000
bashCopy
Dan sekarang, outputnya harusnya, output yang keluar kurang lebih akan seperti ini:
[Thu Nov 3 10:56:55 2022] PHP 8.1.11 Development Server (http://localhost:8000) started
bashCopy
Silakan Anda buka browser dan masukkan url nya sesuai yang di berikan nya http://localhost:8000
. Dan harusnya, Anda akan melihat tampilan error kurang lebih seperti:
Fatal error: Uncaught PDOException: SQLSTATE[HY000] [1049] Unknown database 'learn_pdo' in /Users/irsyadadl/sites/pdo/connection.php:3 Stack trace: #0
bashCopy
Itu artinya, kita belum mempunyai database dengan nama learn_pdo
. Tapi sebelum kita membuat databasenya, saya akan menunjukkan Anda cara agar muncul error nya lebih santai / readble. Buka kembali connection.php
dan tambahkan try
dan catch
seperti:
<?php try { $pdo = new PDO(dsn: 'mysql:host=localhost;dbname=learn_pdo', username: 'root', password: ''); $pdo->setAttribute( PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION ); } catch (\Exception $e) { die($e->getMessage()); }
phpCopy
Maka dengan begitu, Anda akan melihat error yang lebih bisa dibaca dari pada yang tadi yaitu SQLSTATE[HY000] [1049] Unknown database 'learn_pdos'
. Atau jika Anda ingin lebih explicit, bisa dengan seperti ini:
1<?php 2 3try { 4 $pdo = new PDO(dsn: 'mysql:host=localhost;dbname=learn_pdo', username: 'root', password: ''); 5 $pdo->setAttribute( PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION ); 6} catch (\Exception $e) { 7 die('Problem with database connection.'); 8} 9
phpCopy
Dengan seperti itu, kita dapat dengan mudah mengetahui permasalahan yang terjadi terkait dengan koneksi database.
CRUD
Anda pasti ingin mengetahui tentang bagaimana cara kita melakukan yang namanya Create, Read, Update, Delete (CRUD). Untuk itu, silakan buat dulu database nya yaitu learn_pdo
. Sekarang, silakan buat 1 tabel di dalam nya dengan nama users
. Untuk structur tabel nya simpel saja, Anda bisa lihat di bawah ini:
users: id: integer primary_key auto_increment firstname: varchar(191) lastname: varchar(191)
bashCopy
Create
Sekarang, silakan buat 3 file lagi dengan nama create.php
, update.php
dan delete.php
. Dan harusnya untuk struktur file kita sekarang total nya ada 5.
. ├── connection.php ├── create.php ├── delete.php ├── index.php └── update.php
bashCopy
Buka file create.php
dan silakan buat boilerplate html seperti:
<!doctype html> <html lang="en"> <head> <meta charset="UTF-8"> <title>Create</title> </head> <body> <!-- form --> </body> </html>
phpCopy
Kemudian, silakan masukkan connection.php
tepat di atas <!doctype html>
nya seperti:
Kemudian, silakan masukkan connection.php tepat di atas <!doctype html>
nya seperti:
<?php require_once 'connection.php'; ?> <!doctype html> <html lang="en">
phpCopy
Setelah itu, mari kita buat 1 form untuk memasukkan data nya tepat di dalam body tersebut.
<form action="create.php" method="post"> <input type="text" name="firstname" placeholder="Firstname"> <input type="text" name="lastname" placeholder="Lastname"> <button type="submit">Create</button> </form>
phpCopy
Setelah itu, mari kita masukkan syntax php untuk aksi nya tepat di atas form tersebut seperti:
<?php if (!empty($_POST)) { $firstname = $_POST['firstname']; $lastname = $_POST['lastname']; $user = $pdo->prepare("INSERT INTO users (firstname, lastname) VALUES (:firstname, :lastname)"); $user->execute(compact('firstname', 'lastname')); echo "New user created successfully"; } ?> <form...> ... </form>
phpCopy
Buka browser Anda dan kunjungi url http://localhost:8000/create.php
. Dan silakan masukkan datanya, jika berhasil, maka pesan yang keluar adalah "New user created successfully".
Read
Silakan masukkan beberapa data untuk kita tampilkan pada halaman index.php
, Buka file nya silakan masukkan markup seperti berikut ini:
<!doctype html> <html lang="en"> <head> <meta charset="UTF-8"> <title>Document</title> </head> <body> <!-- Query --> <!-- Loop --> </body> </html>
phpCopy
Jangan lupa untuk memasukkan connection.php
tepat di atas <!doctype html>
seperti yang kita lakukan pada bagian create
tadi.
<?php require_once 'connection.php'; ?> <!doctype html> <html lang="en">
phpCopy
Setelah itu, pada bagian yang saya kasi komentar <!-- Query -->
silakan masukkan statement pdo seperti:
<?php $users = $pdo->query("SELECT * FROM users"); ?>
phpCopy
Kemudian, untuk bagian <!-- Loop -->
silakan ganti dengan markup tabel dengan membuat perulangan dari variable users seperti:
<table> <thead> <tr> <th>Firstname</th> <th>Lastname</th> <th>Actions</th> </tr> </thead> <tbody> <?php foreach ($users as $user): ?> <tr> <td><?= $user['firstname'] ?></td> <td><?= $user['lastname'] ?></td> <td> <a href="update.php?id=<?= $user['id'] ?>">Update</a> <a href="delete.php?id=<?= $user['id'] ?>">Delete</a> </td> </tr> <?php endforeach; ?> </tbody> </table>
phpCopy
Harusnya, jika Anda kunjungi http://localhost:8000/
, maka data yang telah Anda masukkan tadi akan muncul pada halaman ini.
Update
Buka file update.php
nya, dan masukkan markup seperti berikut:
<?php require_once 'connection.php'; ?> <!doctype html> <html lang="en"> <head> <meta charset="UTF-8"> <meta name="viewport" content="width=device-width, user-scalable=no, initial-scale=1.0, maximum-scale=1.0, minimum-scale=1.0"> <meta http-equiv="X-UA-Compatible" content="ie=edge"> <title>Document</title> </head> <body> <?php // Get users by id // Update users by id ?> <!-- form edit --> </body> </html>
phpCopy
Perhatikan! Saya sudah memasukkan connection.php
di atas, jadi jangan lupa untuk memasukkan nya. Sekarang, kita akan fokus untuk mengambil data dari id yang telah kita pilih dari index tadi.
$id = $_GET['id']; $user = $pdo->query("SELECT * FROM users WHERE id = $id")->fetch();
phpCopy
Kemudian setelah itu, mari kita tambahkan form nya dengan membuat default value dari id yang di pilih seperti berikut:
<form action="update.php?id=<?= $id ?>" method="post"> <input type="text" name="firstname" placeholder="Firstname" value="<?= $user['firstname'] ?>"> <input type="text" name="lastname" placeholder="Lastname" value="<?= $user['lastname'] ?>"> <button type="submit">Update</button> </form>
phpCopy
Setelah itu, silakan buat aksi update nya tepat dibawah variable users seperti:
if (!empty($_POST)) { $firstname = $_POST['firstname']; $lastname = $_POST['lastname']; $user = $pdo->prepare("UPDATE users SET firstname = :firstname, lastname = :lastname WHERE id = :id"); $user->execute(compact('firstname', 'lastname', 'id')); header('Location: index.php'); }
phpCopy
Dan, harusnya sekarang jika Anda buka localhost:8000/edit.php?id=1
, maka Anda sudah bisa memperbarui datanya. Setelah pembaruan data berhasil, maka dia akan langsung berpindah kehalaman index kembali.
Delete
Setelah itu, buka file delete.php
dan masukkan syntax menghapus record yang di pilih dari halaman index seperti berikut:
<?php require_once 'connection.php'; $id = $_GET['id']; $pdo->query("DELETE FROM users WHERE id = $id"); header('Location: index.php');
phpCopy
Jika sekarang Anda hapus 1 users, maka dia akan pergi kehalaman delete.php
, setelah selesai maka dia akan kembali halaman index. Itu adalah pengertian kode di atas.
Caveat
Disini saya tidak memperdulikan tentang yang namanya kondisi misalnya user id tidak ditemukan, karena disini saya fokus tentang query sql ketika Anda menggunakan PDO ini.
Conclusion
Mulai sekarang, jika Anda masih memakai yang namanya mysql_extension
, maka sudah seharusnya pindah ke PDO. Karena mysql_extension
sendiri juga sudah diusang oleh php nya.
Semoga aritkel ini bermanfaat untuk Anda, dan saya Irsyad, saya akan melihat Anda lagi di artikel selanjutnya.