Sejak versi 2021, PHPMaker menggunakan DBAL (DataBase Abstraction Layer) menggantikan ADOdb.
DBAL menawarkan layer runtime yang ringan menggunakan API PDO dan banyak tambahan fitur lainnya seperti pemeriksaan skema database dan pemanipulasian melalui API yang berorientasikan object.
Faktanya, DBAL mengabstraksi API PDO yang nyata melalui penggunaan antarmuka yang sangat mirip dengan API PDO yang tersedia, sehingga memungkinkan untuk mengimplementasikan driver kustom yang dapat menggunakan API asli atau buatan sendiri yang sudah ada. Misalnya, DBAL dikirimkan dengan driver untuk database Oracle yang menggunakan ekstensi oci8.
Itu artinya, jika Anda menggunakan database PostgreSQL dan/atau SQLite, makan driver PDO berikut wajib dibutuhkan:
– pdo_pgsql PDO extension untuk PostgreSQL
– pdo_sqlite PDO extension untuk SQLite
Untuk database lainnya (MySQL, Microsoft SQL Server, dan Oracle), akan menggunakan driver berikut:
– mysqli (MySQL Improved Extension),
– Microsoft PHP drivers for PHP for SQL Server,
– oci8 extension seperti sebelumnya.
Sedangkan database Microsoft Access sudah tidak didukung lagi sejak PHPMaker 2021. Jadi, jika Anda sebelumnya mengugunakan database ini, segera migrasikan ke database SQL Server.
Apabila selama ini Anda menggunakan kode ADOdb di Server Events, maka Anda wajib untuk menyesuaikannya. Sebagai contoh, jika Anda memiliki kode untuk mengeksekusi sebuah pernyataan SELECT, Anda perlu memperbarui kode tersebut menggunakan executeQuery() milik object connection, dari kode berikut:
$rs = $conn->execute($sql); while (!$rs->EOF) { $value = $rs["fieldname"]; $rs->MoveNext(); } $rs->Close();
menjadi seperti ini:
$stmt = $conn->executeQuery($sql); while ($row = $stmt->fetch()) { $value = $row["fieldname"]; }
Terlihat bahwa kode yang baru menjadi lebih ringkas.
Demikian juga dengan fungsi global Execute(), sejak PHPMaker 2021 diganti menjadi ExecuteQuery(), contoh:
$stmt = ExecuteQuery("SELECT...");
Penting untuk diketahi, bahwa hasil dari kode tersebut adalah object Statement, dan bukan Recordset (seperti di versi-versi PHPMaker sebelumnya).
Jadi, fungsi global Execute() sudah tidak digunakan lagi, dan akan dihapus di versi-versi yang akan datang.
Sedangkan untuk mengeksekusi query SQL INSERT/UPDATE/DELETE dan mengembalikan jumlah baris yang terdampak, kita dapat menggunakan method executeUpdate() milik object connection. Jika kita menggunakan fungsi global, maka kodenya seperti ini:
$rowAffected = ExecuteUpdate("UPDATE MyTable SET... WHERE...");
Untuk info lebih lanjut mengenal DBAL ini, klik Data Retrieval And Manipulation.
Satu lagi fitur yang super canggih sekaligus fleksibel di PHPMaker 2021.
Khusus untuk database MySQL, tersedia 2 pilihan driver MySQL untuk PHP. Yang pertama adalah mysqli (pilihan Default atau Standar), dan yang kedua adalah pdo_mysql.
Jika Anda baru pertama kali menggunakan PHPMaker 2021 dan belum pernah mengganti pilihan driver untuk database MySQL, maka mysqli yang digunakan. Jika Anda ingin menggantinya ke pdo_mysql, maka tinggal ubah dari pengaturan MySQL driver dari menu Tools -> Advanced Settings.
Bayu mengatakan
Terima kasih Bang.
Saya biasa pakai ew_Execute di custom file.
Apakah diganti menggunakan $stmt = $conn->executeQuery($sql); ?
Terima kasih.
Masino Sinaga mengatakan
Pakai PHPMaker versi berapa?
Bayu mengatakan
Bang.
Saya bikin custom file.
Saya mengganti tabel dengan tabel saya sendiri.
Tapi kok selalu no records found.
Seperti tidak konek ke database.
Kira-kira apa yang kurang ya.
Saya pakai MSSQL.
Masino Sinaga mengatakan
Tergantung kodenya seperti apa?
Bayu mengatakan
Selamat malam Bang.
Saya bikin kode di bawah pakai PHPMaker v2021:
Saya lihat tidak ada yang aneh.
Tapi kok pesannya selalu : An internal error has occurred while processing your request.
Salahnya di mana ya Bang?
Makasih Bang.
Masino Sinaga mengatakan
Selamat pagi mas Bayu,
Kalau ingin mengambil nilai tunggal (bukan recordset), ganti ExecuteQuery menjadi ExecuteScalar, lalu coba lagi.
Bayu mengatakan
Selamat pagi Bang.
Jawabannya manjur.
Iya ada di Code Repository ya.
Makasih banyak Bang. GBU.
Masino Sinaga mengatakan
Sama-sama.