Cara Impor File Excel ke Database MySQL dengan PHP
Halo sobat, pernahkah kamu memiliki file Excel yang berisi data penting seperti data alamat dan ingin langsung memasukkannya ke dalam MySQL database? Di artikel ini, saya akan memandu kamu langkah demi langkah untuk mengonversi file Excel menjadi data yang tersimpan di database menggunakan PHP. Kita akan menggunakan MySQLi dengan prepared statement agar proses insert data dilakukan dengan aman.Format File Excel dan Contoh Data
File Excel yang akan kita impor sebaiknya berisi tabel dengan kolom-kolom data alamat. Misalnya, tabel tersebut memiliki kolom:- Nama: Nama lengkap.
- Alamat: Alamat lengkap.
- Kota: Kota tempat tinggal.
- KodePos: Kode pos alamat tersebut.
| Nama | Alamat | Kota | KodePos |
|---|---|---|---|
| Budi Santoso | Jl. Merdeka No. 10 | Jakarta | 10110 |
| Siti Aminah | Jl. Pahlawan No. 5 | Bandung | 40212 |
| Andi Wijaya | Jl. Sudirman No. 15 | Surabaya | 60241 |
| Dewi Lestari | Jl. Kartini No. 22 | Semarang | 50242 |
| Rizky Pratama | Jl. Mawar No. 7 | Medan | 20111 |
Persiapan
Sebelum memulai, pastikan sobat telah menyiapkan:- Server MySQL dengan database bernama
data_alamat - PHP versi 5.6 ke atas (disarankan PHP 7.x)
- Command line tool
xlsx2csvuntuk mengonversi file Excel (.xlsx) ke CSV - File Excel yang akan diimpor (misalnya,
data_alamat.xlsx)
Contoh Program PHP
Berikut adalah contoh program PHP yang akan:- Mencari file Excel terbaru di direktori tertentu.
- Mengonversi file Excel ke CSV menggunakan
xlsx2csv. - Membuat koneksi ke MySQL menggunakan MySQLi.
- Membuat tabel
alamatdi databasedata_alamatjika belum ada. - Memasukkan data dari file CSV ke dalam tabel menggunakan prepared statement agar insert data dilakukan dengan aman.
<?php // Konfigurasi koneksi MySQL $host = "localhost"; $user = "root"; $password = "password"; // Ganti dengan password MySQL kamu $database = "data_alamat"; // Membuat koneksi menggunakan MySQLi $conn = new mysqli($host, $user, $password, $database); if ($conn->connect_error) { die("Koneksi gagal: " . $conn->connect_error); } // Membuat tabel 'alamat' jika belum ada $createTable = "CREATE TABLE IF NOT EXISTS alamat ( id INT AUTO_INCREMENT PRIMARY KEY, nama VARCHAR(255), alamat TEXT, kota VARCHAR(100), kodepos VARCHAR(20) )"; if (!$conn->query($createTable)) { die("Gagal membuat tabel: " . $conn->error); } // Fungsi untuk mendapatkan file Excel terbaru dari direktori function getLatestExcelFile($directory) { $files = glob($directory . "*.xlsx"); if (empty($files)) return false; usort($files, function($a, $b) { return filemtime($b) - filemtime($a); }); return $files[0]; } // Tentukan direktori file Excel $excelDir = "/path/to/excel/files/"; // Ganti dengan path direktori file Excel $latestFile = getLatestExcelFile($excelDir); if (!$latestFile) { die("Tidak ada file Excel yang ditemukan!"); } echo "File yang diproses: $latestFile\n"; // Konversi file Excel ke CSV menggunakan xlsx2csv $csvFile = "/path/to/csv/output.csv"; // Ganti dengan path output CSV yang diinginkan $command = "xlsx2csv " . escapeshellarg($latestFile) . " > " . escapeshellarg($csvFile); system($command); echo "Perintah konversi: $command\n"; // Pastikan file CSV berhasil dibuat if (!file_exists($csvFile) || filesize($csvFile) == 0) { die("File CSV kosong atau tidak ditemukan setelah konversi!"); } // Membuka file CSV dan memasukkan data ke database dengan prepared statement if (($handle = fopen($csvFile, "r")) !== FALSE) { // Membaca header (asumsi baris pertama adalah header) $header = fgetcsv($handle, 1000, ","); // Menyiapkan prepared statement untuk insert data $stmt = $conn->prepare("INSERT INTO alamat (nama, alamat, kota, kodepos) VALUES (?, ?, ?, ?)"); if (!$stmt) { die("Gagal menyiapkan statement: " . $conn->error); } $stmt->bind_param("ssss", $nama, $alamat, $kota, $kodepos); while (($data = fgetcsv($handle, 1000, ",")) !== FALSE) { // Asumsikan file CSV memiliki kolom: Nama, Alamat, Kota, KodePos (urutan kolom 0, 1, 2, 3) if (count($data) < 4) continue; $nama = trim($data[0]); $alamat = trim($data[1]); $kota = trim($data[2]); $kodepos = trim($data[3]); // Eksekusi statement untuk setiap baris if (!$stmt->execute()) { echo "Error: " . $stmt->error . "\n"; } } fclose($handle); $stmt->close(); echo "Data berhasil dimasukkan ke dalam database.\n"; } else { die("Gagal membuka file CSV!"); } $conn->close(); ?> Riyanto