PHP

Cara Membuat Koneksi PHP ke MySQL dengan PDO

Pelajari cara menghubungkan PHP ke MySQL menggunakan PDO, membuat konfigurasi koneksi, prepared statement, penanganan error, dan praktik dasar yang aman untuk pemula.

Website dinamis sering membutuhkan database untuk menyimpan data seperti artikel, pengguna, kategori, atau produk.

Di PHP, salah satu cara yang umum digunakan untuk berkomunikasi dengan MySQL adalah melalui PDO.

PDO menyediakan interface yang konsisten untuk mengakses database dan mendukung prepared statement.

Apa Itu PDO?

PDO adalah singkatan dari PHP Data Objects.

Dengan PDO, kita dapat:

  • Membuka koneksi database.
  • Menjalankan query.
  • Menggunakan prepared statement.
  • Mengambil hasil query.
  • Mengelola transaksi.

Data yang Dibutuhkan

Untuk menghubungkan PHP ke MySQL, biasanya diperlukan:

  • Host database.
  • Nama database.
  • Username database.
  • Password database.
  • Charset.

Gunakan nilai yang diberikan atau dibuat pada hosting. Jangan mengirim, membagikan, atau menaruh kredensial asli di artikel, screenshot, atau repository publik.

Membuat File database.php

Contoh konfigurasi dengan placeholder:

<?php

$host = "localhost";
$dbname = "nama_database";
$username = "user_database";
$password = "PASSWORD_RAHASIA";

$dsn = "mysql:host={$host};dbname={$dbname};charset=utf8mb4";

$options = [
    PDO::ATTR_ERRMODE => PDO::ERRMODE_EXCEPTION,
    PDO::ATTR_DEFAULT_FETCH_MODE => PDO::FETCH_ASSOC,
    PDO::ATTR_EMULATE_PREPARES => false,
];

try {
    $pdo = new PDO($dsn, $username, $password, $options);
} catch (PDOException $e) {
    error_log($e->getMessage());

    exit("Koneksi database gagal.");
}
?>

Jangan menampilkan pesan exception mentah kepada pengunjung karena dapat mengungkap detail lingkungan aplikasi.

Memahami DSN

Bagian:

mysql:host=localhost;dbname=nama_database;charset=utf8mb4

disebut DSN.

DSN memberi tahu PDO driver yang digunakan, host database, nama database, dan charset.

Mengapa Menggunakan utf8mb4?

utf8mb4 mendukung rangkaian karakter Unicode yang lebih lengkap dan merupakan pilihan umum untuk aplikasi modern yang menggunakan MySQL.

PDO::ATTR_ERRMODE

PDO::ATTR_ERRMODE => PDO::ERRMODE_EXCEPTION

Pengaturan ini membuat PDO melempar exception ketika terjadi error database. Hal ini mempermudah penanganan error secara terstruktur.

PDO::ATTR_DEFAULT_FETCH_MODE

PDO::ATTR_DEFAULT_FETCH_MODE => PDO::FETCH_ASSOC

Dengan pengaturan tersebut, hasil query secara default dapat diambil sebagai associative array.

Menguji Koneksi

Untuk testing lokal atau sementara, kita dapat membuat file yang memuat konfigurasi:

<?php
require __DIR__ . "/config/database.php";

echo "Aplikasi dapat terhubung ke database.";
?>

Hapus pesan debug yang tidak diperlukan setelah pengujian selesai.

Membuat Tabel Contoh

Misalnya kita mempunyai tabel artikel:

CREATE TABLE articles (
    id INT UNSIGNED AUTO_INCREMENT PRIMARY KEY,
    title VARCHAR(255) NOT NULL,
    slug VARCHAR(255) NOT NULL UNIQUE,
    created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP
);

Mengambil Data dengan query()

Untuk query yang tidak memiliki input pengguna, contoh sederhana:

<?php
$stmt = $pdo->query(
    "SELECT id, title, slug FROM articles ORDER BY id DESC"
);

$articles = $stmt->fetchAll();

foreach ($articles as $article) {
    echo htmlspecialchars(
        $article["title"],
        ENT_QUOTES,
        "UTF-8"
    );
}
?>

Menggunakan Prepared Statement

Jika query menggunakan data dinamis atau input pengguna, gunakan prepared statement.

<?php
$slug = "belajar-php";

$stmt = $pdo->prepare(
    "SELECT id, title, slug
     FROM articles
     WHERE slug = :slug
     LIMIT 1"
);

$stmt->execute([
    "slug" => $slug
]);

$article = $stmt->fetch();
?>

Mengapa Prepared Statement Penting?

Prepared statement memisahkan struktur SQL dari nilai data yang dimasukkan.

Ini merupakan bagian penting untuk mencegah SQL injection ketika query menggunakan input yang tidak dipercaya.

Jangan membangun query seperti ini:

$sql = "SELECT * FROM users WHERE email = '" . $_POST["email"] . "'";

Gunakan parameter:

$stmt = $pdo->prepare(
    "SELECT * FROM users WHERE email = :email"
);

$stmt->execute([
    "email" => $email
]);

Insert Data

<?php
$title = "Belajar PDO";
$slug = "belajar-pdo";

$stmt = $pdo->prepare(
    "INSERT INTO articles (title, slug)
     VALUES (:title, :slug)"
);

$stmt->execute([
    "title" => $title,
    "slug" => $slug
]);
?>

Update Data

<?php
$id = 1;
$title = "Belajar PDO PHP";

$stmt = $pdo->prepare(
    "UPDATE articles
     SET title = :title
     WHERE id = :id"
);

$stmt->execute([
    "title" => $title,
    "id" => $id
]);
?>

Delete Data

<?php
$id = 1;

$stmt = $pdo->prepare(
    "DELETE FROM articles WHERE id = :id"
);

$stmt->execute([
    "id" => $id
]);
?>

Mengambil Satu Baris

$article = $stmt->fetch();

Jika tidak ada data, hasil dapat berupa false.

Mengambil Banyak Baris

$articles = $stmt->fetchAll();

Gunakan sesuai kebutuhan. Untuk data sangat besar, jangan selalu mengambil seluruh tabel sekaligus.

Kredensial Database

Kredensial database merupakan data sensitif.

Beberapa praktik dasar:

  • Jangan commit password ke repository publik.
  • Jangan menampilkan isi file konfigurasi.
  • Gunakan user database dengan hak yang sesuai kebutuhan.
  • Batasi akses file konfigurasi.
  • Gunakan mekanisme environment/configuration yang sesuai project.

Koneksi Gagal di cPanel

Periksa beberapa hal:

  • Nama database lengkap.
  • Username database lengkap.
  • Password benar.
  • User sudah ditambahkan ke database.
  • User memiliki privilege yang diperlukan.
  • Host database benar.
  • PDO MySQL tersedia.

Jangan Menebak Host Database

localhost sangat umum, tetapi tidak selalu benar untuk semua layanan.

Gunakan host database yang diberikan penyedia hosting.

Kesimpulan

PDO menyediakan cara yang rapi untuk menghubungkan PHP dengan MySQL.

Struktur dasarnya adalah:

Buat koneksi PDO
↓
Prepare query
↓
Execute dengan parameter
↓
Fetch hasil
↓
Tampilkan data dengan aman

Setelah memahami koneksi database dan prepared statement, materi berikutnya adalah membuat CRUD PHP MySQL.

Topik: #Database #MySQL #PDO #PHP #PHP Pemula #Prepared Statement

Artikel berikutnya

Apa Itu PHP? Pengertian, Fungsi, dan Contoh untuk Pemula