Minggu, 21 Desember 2025

error klasik

Mantap, ini error klasik tapi sangat penting dipahami 👍
Justru dari sini pemahaman OOP + MySQLi kamu akan naik level.
🔴 ERROR YANG TERJADI
Fatal error: Call to undefined function mysqli_stmt_get_result()
Artinya bukan salah OOP kamu, tapi lingkungan PHP-nya.
1️⃣ PENYEBAB UTAMA (INI INTINYA)
Fungsi:
Salin kode
Php
mysqli_stmt_get_result()
👉 HANYA ADA kalau PHP kamu terpasang mysqlnd (MySQL Native Driver).
Banyak server lokal (terutama XAMPP lama / Linux tertentu) TIDAK AKTIF mysqlnd.
Makanya:
Di template Spruha → bisa (mungkin beda server / versi)
Di AdminLTE / project ini → gagal
2️⃣ BUKTI NYATA
Error menunjuk ke:
Salin kode
Text
models/Buku.php on line 17
Yang isinya kira-kira:
Salin kode
Php
return mysqli_stmt_get_result($stmt);
➡️ PHP kamu tidak mengenal fungsi itu sama sekali.
3️⃣ SOLUSI PALING AMAN & PROFESIONAL (DISARANKAN)
👉 JANGAN pakai mysqli_stmt_get_result()
Gunakan cara binding manual
✔ kompatibel di semua server
✔ lebih “low level”
✔ sering dipakai di production
4️⃣ PERBAIKAN CLASS Buku.php (FIX TOTAL)
❌ SALAH (punyamu sekarang)
Salin kode
Php
mysqli_stmt_execute($stmt);
return mysqli_stmt_get_result($stmt);
✅ BENAR (AMAN DI SEMUA SERVER)
Salin kode
Php
public function getAll() {
    $query = "SELECT id, judul, pengarang, penerbit, tahunterbit FROM buku";
    $stmt = mysqli_prepare($this->conn, $query);
    mysqli_stmt_execute($stmt);

    // binding hasil query
    mysqli_stmt_bind_result(
        $stmt,
        $id,
        $judul,
        $pengarang,
        $penerbit,
        $tahunterbit
    );

    $data = [];

    while (mysqli_stmt_fetch($stmt)) {
        $data[] = [
            'id' => $id,
            'judul' => $judul,
            'pengarang' => $pengarang,
            'penerbit' => $penerbit,
            'tahunterbit' => $tahunterbit
        ];
    }

    return $data;
}
📌 Perhatikan
Sekarang:
Return = array
Bukan result mysqli lagi
5️⃣ PERUBAHAN DI FILE tampilBuku.php
❌ DULU (pakai mysqli_fetch_assoc)
Salin kode
Php
while($row = mysqli_fetch_assoc($dataBuku)) {
✅ SEKARANG (karena sudah array)
Salin kode
Php
<?php foreach ($dataBuku as $row): ?>
<tr>
    <td><?= $row['judul']; ?></td>
    <td><?= $row['pengarang']; ?></td>
    <td><?= $row['penerbit']; ?></td>
    <td><?= $row['tahunterbit']; ?></td>
</tr>
<?php endforeach; ?>
6️⃣ KENAPA CARA INI LEBIH “OOP”?
✔ Model return data bersih
✔ View tidak tahu SQL
✔ Tidak tergantung mysqlnd
✔ Lebih mudah di-test
✔ Aman dipakai di server mana pun
7️⃣ OPSI ALTERNATIF (KALAU MAU)
Kalau kamu MAU tetap pakai mysqli_stmt_get_result(), syaratnya:
PHP ≥ 5.4
mysqlnd aktif
Cek dengan:
Salin kode
Php
phpinfo();
Cari:
Salin kode

mysqlnd enabled
Tapi untuk belajar OOP yang benar → jangan tergantung ini.
8️⃣ RINGKASAN SINGKAT
Masalah
Solusi
mysqli_stmt_get_result error
mysqlnd tidak aktif
Cara aman
mysqli_stmt_bind_result
Return model
array
View
foreach
🔥 NEXT STEP (LANJUTAN LOGIS)
Kalau kamu mau, aku bisa lanjutkan:
1️⃣ UPDATE data buku (OOP + prepared)
2️⃣ DELETE buku (aman)
3️⃣ Edit form → readonly → enable (full OOP)
4️⃣ Gabung ke AdminLTE dengan benar
Tinggal jawab:
LANJUT UPDATE OOP

0 komentar:

Posting Komentar

 
Design by Free WordPress Themes | Bloggerized by Lasantha - Premium Blogger Themes | Press Release Distribution