Tutorial PHP #26: PHP & MySQL: Koneksi Database dengan MySQLi
1. Kenapa Database Penting?
Hampir semua aplikasi web nyata membutuhkan database untuk menyimpan data secara persisten - user, artikel, produk, transaksi, dan lainnya. PHP punya dua cara utama untuk koneksi ke MySQL: MySQLi dan PDO. Tutorial ini membahas MySQLi.
2. Persiapan Database
Sebelum koneksi, buat database dan tabel di phpMyAdmin atau via SQL:
CREATE DATABASE db_belajar;
USE db_belajar;
CREATE TABLE users (
id INT AUTO_INCREMENT PRIMARY KEY,
nama VARCHAR(100) NOT NULL,
email VARCHAR(150) NOT NULL UNIQUE,
password VARCHAR(255) NOT NULL,
created_at DATETIME DEFAULT CURRENT_TIMESTAMP
);
3. Koneksi MySQLi (Procedural)
<?php
// config.php
$host = "localhost";
$user = "root";
$pass = "";
$dbname = "db_belajar";
$conn = mysqli_connect($host, $user, $pass, $dbname);
if (!$conn) {
die("Koneksi gagal: " . mysqli_connect_error());
}
// Set charset untuk mendukung karakter Unicode / bahasa Indonesia
mysqli_set_charset($conn, "utf8mb4");
echo "Koneksi berhasil!";
?>
4. Koneksi MySQLi (OOP)
<?php
// config_oop.php
$mysqli = new mysqli("localhost", "root", "", "db_belajar");
// Cek error
if ($mysqli->connect_errno) {
die("Koneksi gagal: " . $mysqli->connect_error);
}
$mysqli->set_charset("utf8mb4");
echo "Koneksi OOP berhasil!";
?>
5. Menjalankan Query
<?php
require_once "config.php";
// SELECT query
$result = mysqli_query($conn, "SELECT * FROM users ORDER BY id DESC");
if ($result) {
$jumlah = mysqli_num_rows($result);
echo "Ditemukan $jumlah user <br>";
while ($row = mysqli_fetch_assoc($result)) {
echo "- {$row['nama']} ({$row['email']}) <br>";
}
mysqli_free_result($result); // bebaskan memory
} else {
echo "Query error: " . mysqli_error($conn);
}
mysqli_close($conn); // tutup koneksi
?>
6. Prepared Statement untuk Keamanan
Selalu gunakan prepared statement untuk query yang melibatkan input user - ini mencegah SQL Injection.
<?php
require_once "config.php";
$searchEmail = $_GET["email"] ?? "";
// JANGAN lakukan ini - rentan SQL Injection!
// $result = mysqli_query($conn, "SELECT * FROM users WHERE email = '$searchEmail'");
// Gunakan prepared statement:
$stmt = mysqli_prepare($conn, "SELECT id, nama, email FROM users WHERE email = ?");
mysqli_stmt_bind_param($stmt, "s", $searchEmail); // "s" = string
mysqli_stmt_execute($stmt);
$result = mysqli_stmt_get_result($stmt);
if ($row = mysqli_fetch_assoc($result)) {
echo "Ditemukan: {$row['nama']}";
} else {
echo "User tidak ditemukan";
}
mysqli_stmt_close($stmt);
?>
Karakter dalam bind_param: s = string, i = integer, d = double/float, b = blob.
7. File Konfigurasi Koneksi
<?php
// db.php - file koneksi yang bisa di-include di semua halaman
define("DB_HOST", "localhost");
define("DB_USER", "root");
define("DB_PASS", "");
define("DB_NAME", "db_belajar");
$conn = mysqli_connect(DB_HOST, DB_USER, DB_PASS, DB_NAME);
if (!$conn) {
http_response_code(500);
die(json_encode(["error" => "Koneksi database gagal"]));
}
mysqli_set_charset($conn, "utf8mb4");
?>
8. Ringkasan
- MySQLi tersedia dalam dua gaya: procedural dan OOP
- Selalu cek hasil koneksi sebelum menjalankan query
- Gunakan
prepared statementuntuk query dengan input user - mencegah SQL Injection - Set charset ke
utf8mb4untuk mendukung semua karakter Unicode
Tutorial berikutnya membahas CRUD dasar dengan PHP native.
.jpg)
