Untuk dapat menggunakan dan mengakses database MySQL, PHP menyediakan 3 cara koneksi: menggunakan PDO (PHP Data Objects), mysqli extension dan mysql extension. Dalam tutorial belajar PHP kali ini kita akan membahas keunggulan masing-masing, dan perbedaan ketiganya.
Perkembangan Cara Koneksi PHP dan MySQL
PHP merupakan bahasa pemograman yang selalu di update dan berkembang mengikuti teknologi terbaru. Saat ini, Pemrograman Berorientasi Objek (Object Oriented Programming) merupakan trend pemrograman PHP, dan hal ini juga mempengaruhi cara mengakses database MySQL dari PHP.
PHP memiliki 3 cara pengaksesan MySQL, yakni melalui PDO (PHP Data Objects), mysqli extension dan mysql extension. PDO menggunakan pemrograman objek, mysqli extension tersedia dalam bentuk objek dan prosedural (diakses melalui fungsi-fungsi) sedangkan mysql extension sepenuhnya menggunakan pemograman prosedural.
Mari kita bahas pengertian dan perbedaan ketiga metode ini:
1. Koneksi MySQL dengan mysql extension
Saat pertama kali mempelajari PHP MySQL sekitar tahun 2008 (atau jika anda pernah mempelajari PHP-MySQL beberapa tahun yang lalu), untuk mengakses MySQL dari PHP, kita menggunakan fungsi-fungsi seperti mysql_connect(), mysql_query(), dan mysql_fetch_array(). Fungsi-fungsi ini tergabung ke dalam mysql extension (saat itu PDO dan mysqli extension masih jarang digunakan)
Namun sekarang (tepatnya mulai PHP versi 5.5.0) PHP memutuskan untuk membuat mysql extension berstatus deprecated. Yang artinya pengaksesan database MySQL menggunakan fungsi mysql extension sudah tidak disarankan lagi. Programmer PHP diharapkan pindah ke mysqli extension atau PDO yang berbasis objek.
Alasannya, MySQL versi terbaru memiliki fitur-fitur yang semakin lengkap dan kompleks, sehingga PHP memutuskan untuk membuat fungsi extension baru agar programmer PHP bisa menggunakan fitur-fitur ini.
2. Koneksi MySQL dengan mysqli extension
Sebagai pengganti mysql extension, PHP menyediakan mysqli extension (mysqli merupakan singkatan dari MySQL Improved). Mysqli extension ini pada dasarnya adalah perbaikan dari mysql extension dan dikembangkan untuk mendukung fitur-fitur terbaru untuk MySQL 4.1 keatas.
Hampir semua fungsi yang ada pada mysql extension juga tersedia pada mysqli. Syntax (aturan penulisan) mysqli sangat mirip dengan mysql extension. Sehingga jika anda telah lama menggunakan mysql extension, akan sangat mudah untuk beralih menggunakan mysqli extension.
Selain menggunakan mysql maupun mysqli extension, cara ketiga untuk pengaksesan database MySQL dari PHP adalah dengan menggunakan PHP Data Objects (atau sering disingkat dengan PDO).
3. Koneksi MySQL dengan PDO (PHP Data Objects)
PDO (PHP Data Objects), adalah extension atau penambahan fitur dalam PHP yang dirancang sebagai interface universal untuk pengaksesan berbagai jenis database (tidak hanya MySQL). Contohnya, jika kita menggunakan PDO dalam menulis kode pemograman, lalu suatu saat website kita bertukar database dari MySQL ke Oracle, maka kita tidak perlu mengubah semua kode program, cukup mengubah cara pemanggilan PDO diawal program saja.
Dari ketiga cara koneksi PHP dengan MySQL ini, metode yang disarankan adalah menggunakan mysqli atau PDO.
Perbandingan antara mysqli, PDO dan mysql extension
Sebagai perbandingan fitur antara ketiga jenis koneksi PHP-MySQL ini, berikut adalah tabel perbandingan antara mysqli, PDO dan mysql extension yang bersumber dari manual resmi PHP:
Cara Penulisan mysql extension, mysqli extension, dan PDO (PHP Data Objects)
Untuk mengetahui secara sekilas perbedaan cara pengaksesan database MySQL menggunakan mysql extension, mysqli extension, dan PDO, berikut contoh kode PHPnya:
<?php // cara mengakses MySQL menggunakan mysql extension: $link = mysql_connect("localhost", "root", "qwerty"); mysql_select_db("universitas"); $result = mysql_query("SELECT * FROM mahasiswa"); $row = mysql_fetch_assoc($result); // cara mengakses MySQL menggunakan mysqli extension: $mysqli = new mysqli("localhost", "root", "qwerty", "universitas"); $result = $mysqli->query("SELECT * FROM mahasiswa"); $row = $result->fetch_assoc(); // cara mengakses MySQL menggunakan PDO: $pdo = new PDO('mysql:host=localhost;dbname=universitas', 'root', 'qwerty'); $statement = $pdo->query("SELECT * FROM mahasiswa"); $row = $statement->fetch(PDO::FETCH_ASSOC); ?>
Dalam contoh diatas, dianggap bahwa user MySQL adalah root, password ’qwerty’, dan nama database ’universitas’.
Anda tidak perlu memahami kode program diatas, karena kita akan membahasnya dengan lengkap dalam tutorial belajar PHP MySQL di duniailkom ini.
Untuk tahap pertama, saya akan menggunakan metode mysql extension yang berbasis fungsi terlebih dahulu. Walaupun metode ini tidak disarankan lagi, namun metode inilah yang paling mudah dipelajari dan telah dikenal luas.
Setelah selesai membahas mysql extension, selanjutnya kita akan beralih ke mysqli extension yang bisa ditulis dengan procedural style (menggunakan fungsi-fungsi) ataupun dengan object style. Terakhir, kita akan membahas cara membuat koneksi PHP MySQL menggunakan PDO. Cara pengaksesan MySQL dengan PDO yang berbasis objek akan lebih mudah dipahami jika anda telah mempelajari pemrograman berbasis objek.
Dalam tutorial selanjutnya, kita akan membahas pengertian extension PHP, dan cara pengaturan PHP (setingan PHP) agar kita dapat menggunakan mysql extension, dalam tutorial Pengertian extension PHP dan cara setting mysql extension.
sebelumnya, terimakasih atas tutorialnya mas gan, mudah2han berkah :-)
saya jadi bingung mas gan, mana yg sebaiknya saya pelajari dahulu.
Mysq extention, mysqli extention, atau PDO? kalau belajar dari mysql extention takutnya juga sebentar lgi dah g kepake krna deprecated. Kalau PDO, bagi pemula spertinya kok lebih sulit :-)
Solusinya, mungkin mysqli extention ya? hehhee…tapi nyari tutorial lengkapnya jg susah.
Menurut mas gan, sebaiknya saya pelajari yg mana dlu dari ketiga itu?
oh ya, hanya saran, mungkin lebih baik duniailkom membuat tutorial koneksi php mysqlnya langsung yang menggunakan mysqli extention saja mas gan, karena utk tutorial yg mysql extention ( yang sudah deprecated utk php terbaru) rasanya sudah banyak buat. :-)
Terimakasih,
Salam
Terimakasih juga atas kunjungannya Luqman, saya tetap membahas tentang mysql extension karena sampai saat ini masih umum digunakan dan paling dikenal, dalam beberapa situs maupun forum belajar PHP juga masih sering dibahas. Walaupun begitu saat ini mysql extension sudah dianggap deprecated (usang) dan sebaiknya segera beralih ke mysqli extension.
Diantara ketiga extension MySQL tersebut, mysql extension adalah yang paling sederhana dan paling mudah dipelajari. PDO menawarkan fungsi database yang lebih powerful, namun jika belum mempelajari konsep pemograman objek di dalam PHP, akan sedikit susah dipahami. Sehingga pilihan yang paling baik adalah mysqli extension.
Mudah-mudahan secepatnya saya akan melanjutnya pembahasan mengenai mysqli dan juga PDO.
Terimakasih atas penjelasannya, Sekarang ini saya mulai beralih dari mysqli ke PDO dan ternyata harus menghafal syntaxnya lagi :(
Hehe.. iya mas, saya juga sudah lama tidak ngoding PHP, n ternyata udah beralih ke mysqli sama PDO. mari sama-sama belajar PHP lagi :)
Nama Database bukan mahasiswa ya?
Maaf gan, ternyata saya memang salah menulis nama database di contoh kode program, dimana seharusnya nama database: universitas.
Saya sudah perbaiki, dan terimakasih atas koreksinya :)
script itu di taruhnya di file apa? koneksi.php, cek.php atau dimana? mohon arahannya
Silahkan lanjut baca tutorialnya gan… kode-kode diatas cuma untuk contoh singkat saja. Mengenai apa yang harus ditulis dan di diletakkan pada file mana akan dibahas lengkap dalam tutorial setelah ini.
Untuk daftar isi mengenai tutorial PHP MySQL, bisa dilihat pada Tutorial PHP MySQL: Cara Membuat Koneksi PHP ke Database MySQL
Mau nanya tentang mysqli Gan,
Pas ane baca database, ada masalah di $query=$mysqli->query($sql);
Pesan errornya “Call to a member function query() on a non-object…”, itu kenapa ya Gan?
Scrpit lengkapnya:
$sql=”SELECT * FROM tb_runningtext”;
$query=$mysqli->query($sql);
while($query->fetch_assoc()){
echo “$data[1]”
}
Mohon maaf sebelumnya, Itu scriptnya langsung diambil dari kode program ya? atau ditulis ulang untuk komentar ini? Soalnya ada kode yang kurang, dan error yang terjadi bukan yang dimaksud.
Sebagai contoh, variabel $data[1] tidak terdefinisi, dan method fetch_assoc() juga tidak bisa digunakan jika yang akan diakses adalah $data[1], tapi harus menggunakan fetch_row().
Berikut adalah kode program yang seharusnya:
Kembali ke pesan error: “Call to a member function query() on a non-object…” Ini terjadi karena query yang digunakan tidak memberikan hasil sama sekali, mungkin tabel tersebut tidak ada. Bisa dipastikan kembali apakah querynya sudah benar (bisa dites menggunakan PHPmyadmin).
Untuk penjelasan lebih lanjut cara menggunakan mysqli object seperti ini bisa lanjut ke: Cara Menampilkan Data dengan mysqli PHP (Object Style).
Mudah2an bisa membantu :)
Perbedaan yang mendasar dari mysql dan mysqli itu apa yah mas, masih kurang paham
Sederhananya, mysql extension adalah fungsi penghubung PHP-MySQL versi lama, sedangkan mysqli extension adalah versi baru. Saat ini kita sebaiknya sudah pindah ke versi baru (mysqli).
Dalam seri tutorial ini saya tetap membahas sedikit tentang mysql extension karena dalam buku2 lama masih banyak dibahas.
semoga selalu diberkahi oleh ALLAH SWT atas ilmu yang bermafaat ini massss… :)
aamiiiinnnnnn….
Amiin.. terimakasih untuk doanya mas :)
hai duniaikom info tutor anda sangat menarik, saya ingin mengajak anda untuk berpartnership dalam pengisian content tutorial.
Thought you wanna grab some coffee or a casual chit-chat? We could provide more data and information that might take your interest about our story. Let me know if you’re free anytime soon.
Best Regards
Arie
Silahkan gan :)
Gan.. mau nnya nihh,, kan saya bikin di mysql biasa nah waktu di upload malah eror karna phpmyadmin di cpanelnya menggunakan mysqli,, syntak koneksinya juga jadi salah adakah saran atau trik biar mysql nya bisa di baca sama mysqli?? atau kah harus mengedit semua file php ??
thanks gan :D
permasalah yang sama gan. apakah sudah bisa work?
Menurut saya harus diubah semua secara manual gan. Soalnya syntax penulsan mysqli dan mysql extension juga berbeda.
Atau coba kontak tim support web hostingnya, mana tau bisa mengaktifkan mysql extension kembali.
saya kan sudah ganti ke syntax mysqli, tapi ko tetep saja ga bisa konek kang ya, tolong pencerahannya gan.
Udah diganti juga inputan argumen fungsi mysqlinya gan? soalnya kita g bisa cuma ganti tulisan mysql_connect() dengan mysqli_connect(), tapi juga urutan argumen-nya. Pemilihan database di lakukan di awal pada mysqli, sedangkan di mysql extension bisa dilakukan belakangan. Memang terpaksa harus ditulis ulang satu2 dan diperiksa manual.
mas, apa ada perbedaan hasilnya atau error yg muncul saat menggunakan MySQLi…jalankannya dengan xampp versi 1.7.3
Seharusnya g ada perbedaan atau error gan, soalnya mysqli sudah cukup lama disupport PHP, termasuk PHP yang ada di XAMPP 1.7.3
maaf mas sebelumnya, mungkin pertanyaan saya OOT, namun saya penasaran tentang login antara php dan mysql. Kira kira lebih baik yang mana, antara login menggunakan root setelah itu otorisasi usernya tergantung pada tabel tertentu atau langsung menggunakan privilege pada mysql?
Menurut saya best practicenya, buat 1 user MySQL untuk seluruh aplikasi mas, tapi bukan root. Misalnya kita ingin membuat aplikasi sistem informasi sekolah. Caranya, buat 1 database "sekolah" lalu buat 1 user MySQL "admin_sekolah". User "admin_sekolah" ini punya akses penuh ke seluruh tabel dalam database "sekolah".
Untuk user pengguna sistem informasi ini, kita batasi saja dari kode PHPnya, misalnya user dosen bisa mengedit tabel "mata_kuliah", sedangkan user mahasiswa hanya bisa melihat tabel ini, dan tidak bisa mengeditnya. Semuanya tetap menggunakan user "admin_sekolah" di sisi MySQL, namun hak aksesnya dibatasi oleh PHP.
Tutorial di dunia ilkom itu bagus & mantap . .
Setelah saya pelajari dari dunia ilkom tentang php OOP sedikit mendapat masalah saat penerapan langsung ke pembuatan script yang semestinya . .
Tak pantang menyerah saya cari referensi php dr segala penjuru, nah singkat cerita nemu tuh referensi yang mantap, powerfull dah . . .
Sayang hanya referensi . .
Ternyata kurangnya saya itu dalam ketelitian . .
Soal php yang berawal dari bahasa C,
Setelah baca timbul tuh lampu neon diatas kepala :)
Langsung ke TKP?
Maksudnya Tempat Kerja Penyimpanan,
Kebetulan sudah punya bnyk ebook soal bahasa c sampai c++, cuma males aja bukanya,
Setelah berjam-jam, berhari-hari duduk depan kompi nga gitu juga x yaahhh :D
Sekarang sudah lumayan paham dan lumayan sudah bisa menerapkan langsung ke semestinya bukan seperti contoh kucing atau lainnya,
Nah dari sini saya mau kasih saran buat dunia ilkom biar lebih maju dan maju ayo maju ayo maju, lagu kali . . :D
Kalau bisa?
Harusnya sih dibisain. :D maksa bgtz ini user!!!
Bikin tutorial bahasa C sampai bahasa C++ juga donk,
Mungkin sudah bnyk tutorial yang bertebaran kyk kembang api,
Tapi Andalah yang paling "Ngeh" dalam penjelasan masalah . .
Hanya saran saja :)
Terima kasih sebelumnya ..
Karena menurut saya pribadi menguasai/sedikit tahu tentang bahasa C/C++ / bahkan JAVA itu akan lebih mudah memahami konsep OOP . .
Iya gan, konsep OOP memang lumayan ribet untuk dibahas. Dibuku2 (dan juga di duniailkom) menggunakan contoh ‘aneh’ seperti binatang, orang, atau mobil untuk menyederhanakan pemahaman. Kalau dipaksa langsung ke praktek ‘real world’, bakalan bingung abis.
Untuk implementasi konsep OOP juga butuh belajar lagi. Kalau di saya, minimal paham dulu design pattern, baru bisa dibilang paham OOP.Kalau g, jadinya adalah program yang pakai objek, tapi “rasa” procedural, hehe…
Untuk usulnya tentang tutorial C, C++ dan Java ditampung y gan. Saat ini saya masih fokus ke web programming (terutama membuat eBooknya). Setelah itu baru masuk kesana.
Lanjutkan perjuangannya gan, udah bisa lanjut ke laravel atau code igniter tuh.. :)
mas saya mau tanya mengenai perbedaan dari gaya penulisan object oriented dengan prosedural di mysqli itu apa ya ?. dan kira-kira lebih cocok menggunakan gaya yang mana apabila kita membuat web, karena sintaks prosedural sangat mirip dengan sintaks di mysql extension. terima kasih.
Untuk web-web sederhana, pakai mysqli prosedural sudah pas kok gan, object orientednya lebih cocok untuk web yang besar dan kompleks (yang juga dibangun dengan konsep OOP)
Min, kalo saya mau menampilkan data yang ada di database dengan mysqli dan php itu gimana ya? saya mau menampilkan datanya dalam bentuk <select> <option>. Terimakasih..
Selama udah menguasai HTML dan PHP, seharusnya udah bisa buat sendiri gan. Nanti kan hasil dari database dalam bentuk array, array ini yang kemudian kita looping untuk menjadi nilai tag <option>.
Saran saya bisa baca2 lagi tentang PHP dasar, konsep perulangan, hingga mysqli :)
thanks berat sharing ilmunya gan =)
Salam Min, Min saya baru belajar php…
saya telah melakukan instalasi xampp versi v3.2.2.
saat membuat sintax php untuk koneksi ke mysql dengan akses mysql extension dan mysqli entention, selalu terjadi kesalahan "Fatal error: Uncaught Error: Call to undefined function mysql_connect() in C:\xampp\htdocs\angkast\database\koneksi.php:3 Stack trace: #0 C:\xampp\htdocs\angkast\Index.php(7): include() #1 {main} thrown in C:\xampp\htdocs\angkast\database\koneksi.php on line 3"
namun ketika MySQL diakses menggunakan PDO baru bisa..
mohon pencerahannya, agar bisa menggunkan mysql extention…
XAMPP pakai versi terbaru y gan (XAMPP 7.0.0 keatas?) jika iya, maka mysql extention sudah tidak bisa dipakai lagi, karena memang dari PHP 7 nya yang sudah g support.
Solusinya bisa pakai XAMPP dibawahnya, seperti XAMPP 5.6.x (PHP versi 5.6.x)
thanks gan sangat membantu, Dunia Ilkom memang terbaik (y)
mas andre, untuk hosting di indonesia udah support belum sama konsep PDO ini?
Menurut saya sudah, soalnya sebagian besar web hosting saat ini menggunakan PHP 5 keatas, umumnya PHP 5.5 atau 5.6. Tp bisa dipastikan dulu ke pihak web hostingnya…
Terima kasih banyak untuk admin duniailkom yg sudah berbaik hati berbagi ilmu yg sangat bermanfaat :)
semoga admin duniailkom rezeki nya di lancarkan dan masuk surga.. Amin..
Trims utk penjelasannya tpi saya mau tnya mengenai program saya menggunakan dua jenis koneksi. Saya padukan antara Mysqli dengan pdo. Tapi lebih mendominasi yg pdo. Saya mau tnya apa itu tdk bermasalah saat saya menghosting? Trims sebelumnya
Seharusnya tidak ada masalah, selama settingannya sesuai dengan yang di web hosting nanti.
Mas mau tanya, fungsi -> maksudnya sama dengan = kah?
Tidak, keduanya berbeda. Tanda panah -> dipakai dalam pemrograman object PHP, yakni untuk mengakses sebuah property atau method dari sebuah object.
Sedangkan tanda = merupakan operator assignment yang dipakai untuk menginput sebuah nilai ke dalam suatu variabel.