Cara Mengatasi SQLSTATE Error di PHP PDO
Error SQLSTATE di PHP PDO berarti query database gagal dijalankan dan PDO mengembalikan kode standar SQL beserta pesan detailnya. Bentuknya bisa seperti SQLSTATE[42S02], SQLSTATE[23000], atau SQLSTATE[HY000].
Walaupun terlihat menakutkan, error ini justru sangat berguna untuk debugging karena biasanya memberi petunjuk apakah masalahnya ada di koneksi, nama tabel, nama kolom, constraint database, atau query SQL itu sendiri.
Kapan Error Ini Biasanya Muncul?
- Saat nama tabel atau kolom salah ketik
- Saat jumlah placeholder
?tidak cocok dengan data yang dikirim - Saat data yang dimasukkan melanggar unique key atau foreign key
- Saat koneksi database salah atau server MySQL tidak berjalan
- Saat query
LIMIT,OFFSET, atau tipe data dikirim dalam format yang salah
Penyebab Paling Umum
1. Nama Tabel atau Kolom Salah
Kalau tabel yang benar adalah produk, PDO biasanya mengembalikan SQLSTATE[42S02].
2. Placeholder dan Data Tidak Cocok
Query meminta tiga nilai, tetapi data yang dikirim hanya dua.
3. Koneksi Database Bermasalah
Contohnya:
- host salah
- username/password salah
- MySQL belum jalan
- nama database belum dibuat
4. Constraint Database Dilanggar
Contoh umum:
- email harus unik, tetapi kamu memasukkan email yang sama
- foreign key mengacu ke data yang belum ada
- field
NOT NULLdikirim kosong
5. Query SQL Kurang Tepat
Ini sering terjadi pada:
LIMITdanOFFSETtanpaPDO::PARAM_INT- typo sintaks SQL
- query dinamis yang menyusun string SQL tanpa validasi
Langkah Diagnosis
- Baca seluruh pesan error, jangan hanya berhenti di kata
SQLSTATE. - Catat kode error-nya, misalnya
42S02,23000, atauHY000. - Cek query yang dijalankan dan data yang dikirim ke
execute(). - Bandingkan nama tabel/kolom dengan schema database.
- Kalau error terjadi di development, tangkap exception dan tampilkan pesannya.
SQLSTATE hanyalah payung besarnya. Petunjuk utamanya ada di kode dan pesan setelahnya, misalnya Table doesn't exist, Integrity constraint violation, atau Connection refused.
Langkah Fix
1. Perbaiki Nama Tabel dan Kolom
Sebelum menjalankan query, pastikan schema database memang memakai nama itu.
2. Pastikan Jumlah Placeholder Sesuai
3. Gunakan bindValue() untuk Angka Tertentu
4. Validasi Data Sebelum Masuk ke Database
Kalau database mewajibkan email unik atau foreign key tertentu, cek dulu dari sisi aplikasi agar error lebih mudah dijelaskan ke user.
5. Tangani Error dengan try...catch
Contoh Sebelum dan Sesudah
Sebelum
Pada beberapa konfigurasi MySQL, ini bisa memicu error karena LIMIT dan OFFSET dikirim sebagai string.
Sesudah
Error Umum
SQLSTATE[42S02]: Base table or view not found
Biasanya nama tabel salah atau tabelnya memang belum dibuat.
SQLSTATE[23000]: Integrity constraint violation
Biasanya data melanggar aturan unique key, foreign key, atau NOT NULL.
SQLSTATE[HY000] [2002] Connection refused
Biasanya MySQL belum berjalan, host salah, atau port tidak sesuai.
SQLSTATE[42000]: Syntax error or access violation
Bisa berarti query SQL salah, nama kolom tidak valid, atau hak akses user database kurang.
Pencegahan
- Tulis query dengan prepared statement, bukan string gabungan sembarangan.
- Cocokkan schema database sebelum menulis query manual.
- Validasi input user sebelum dikirim ke database.
- Gunakan
PDO::ATTR_ERRMODE => PDO::ERRMODE_EXCEPTIONagar error lebih jelas. - Log error database di development dan production dengan cara yang aman.
Bacaan Terkait
FAQ
Apakah semua SQLSTATE berarti query saya salah?
Tidak. Kadang query-nya benar, tetapi koneksi database, data input, atau constraint schema yang bermasalah.
Kenapa query aman di lokal tetapi gagal di server?
Bisa karena versi MySQL berbeda, mode SQL berbeda, schema belum sinkron, atau hak akses user database di server lebih terbatas.
Apakah error SQLSTATE boleh ditampilkan ke user?
Jangan di production. Tampilkan pesan yang ramah ke user, lalu log detail teknisnya untuk developer.