Jika dalam tutorial sebelumnya kita mempelajari mysqli dengan menggunakan fungsi-fungsi atau dikenal dengan procedural style mysqli, dalam tutorial PHP MySQL kali ini kita akan membahas tentang object style mysqli.
Cara Penulisan Object Style mysqli
Sebagai cara koneksi yang lebih baru daripada mysql extension, mysqli memiliki 2 jenis style, yakni procedural style dan object-oriented style. Kecendrungan pemrograman saat ini lebih banyak menggunakan objek. Untuk hal inilah PHP juga menyediakan mysqli dengan "rasa" objek.
Pemrograman berbasis objek lebih banyak disukai karena cenderung rapi dan mudah dikembangkan, terutama jika kita mengerjakan proyek besar yang butuh ribuan baris program. Konsep OOP seperti inheritance, encapsulation dan polymorfism membuat program menjadi lebih tertata.
Langsung saja kita lihat bagaimana cara penggunaan objek di dalam mysqli.
Cara Membuat Koneksi dengan MySQL (mysqli constructor)
Untuk membuat koneksi MySQL dengan PHP menggunakan mysqli object style, caranya adalah dengan menggunakan mysqli constructor. Constructor mysqli adalah sejenis fungsi yang digunakan untuk membuat object baru dari class mysqli.
Argumen di dalam construktor mysqli ini sama persis dengan argumen fungsi mysqli_connect(), yakni lokasi komputer, nama user, dan password user.
Berikut adalah cara membuat koneksi mysqli di localhost untuk user "root" dengan password "qwerty":
<?php $link = new mysqli("localhost", "root", "qwerty"); ?>
Pada kode diatas, saya membuat objek $link dari class mysqli. Di dalam OOP, keyword new digunakan untuk membuat objek baru. Dengan objek $link hasil mysqli constructor inilah proses query MySQL nantinya kita jalankan.
Sama seperti fungsi mysqli_connect(), constructor mysqli juga memiliki argumen tambahan, yakni nama database yang ingin digunakan. Jika kita ingin langsung mengakses database "universitas", maka kode programnya menjadi:
<?php $link = new mysqli("localhost", "root", "qwerty", "universitas"); ?>
Cara Menutup Koneksi MySQL Dengan Method mysqli::close()
Walaupun PHP akan lansung menutup koneksi ke MySQL jika halaman telah selesai di proses, namun kita juga bisa menutupnya secara manual menggunakan method close() dari objek mysqli, atau biasa ditulis sebagai mysqli::close(). Berikut contoh penggunaannya:
<?php // buat koneksi dengan MySQL $link = new mysqli("localhost", "root", "qwerty","universitas"); //.... Proses PHP //.... Proses PHP //.... Proses PHP // tutup koneksi $link->close(); ?>
Cara Menjalankan Query MySQL Dengan Method mysqli::query()
Jika di dalam penulisan procedural kita menggunakan fungsi mysqli_query() untuk menjalankan query MySQL, maka di dalam objek style, kita mengaksesnya menggunakan method mysqli::query().
Agar lebih mudah dipahami, langsung saja kita masuk kedalam contoh kode program:
<?php // buat koneksi dengan MySQL, gunakan database: universitas $link = new mysqli("localhost", "root", "qwerty", "universitas); // jalankan query $result = $link->query("SELECT * FROM mahasiswa_ilkom"); ?>
Perhatikan bahwa di dalam proses pemanggilan method query(), kita membutuhkan 1 argumen, yakni query MySQL yang akan dijalankan.
Cara Menampilkan Data MySQL Dengan mysqli object style
Untuk menampilkan hasil query MySQL, mysqli object memiliki banyak method. Kali ini kita akan membahas 3 cara yang paling sering digunakan, yakni method fetch_row(), fetch_array() dan fetch_object(). Cara penggunaan ketiga method ini hampir sama dengan padanan fungsinya di procedural style, yakni dengan fungsi mysqli_fetch_row(), mysqli_fetch_array(), dan mysqli_fetch_object().
Agar lebih jelas, langsung saja kita masuk ke dalam contoh kode program untuk menampilkan seluruh isi data dari tabel mahasiswa_ilkom.
Pembahasan pertama, yakni cara menampilkan data mysqli dengan method fetch_row(). Berikut adalah contoh kode programnya:
<?php // buat koneksi dengan MySQL, gunakan database: universitas $link = new mysqli("localhost", "root", "qwerty", "universitas"); // jalankan query $result = $link->query("SELECT * FROM mahasiswa_ilkom"); // tampilkan query while ($row= $result->fetch_row()) { Â Â echo "$row[0] $row[1] $row[2] $row[3] $row[4]"; Â Â echo "<br />"; } ?>
Dalam contoh diatas, saya mengunakan method fetch_row() dari objek $result yang merupakan objek hasil pemanggilan method query(). Method fetch_row() ini tidak memerlukan argumen apapun, sehingga kita memanggilnya dengan cara $result->fetch_row().
Cara kedua untuk menampilkan data mysqli adalah dengan method fetch_array(). Berikut contoh kode programnya:
<?php // buat koneksi dengan MySQL, gunakan database: universitas $link = new mysqli("localhost", "root", "qwerty", "universitas"); // jalankan query $result = $link->query("SELECT * FROM mahasiswa_ilkom"); // tampilkan query while ($row=$result->fetch_array(MYSQLI_ASSOC)) { Â Â echo $row['nim']." ".$row['nama']." ".$row['umur']." "; Â Â echo $row['tempat_lahir']." ".$row['IPK']; Â Â echo "<br />"; } ?>
Sama seperti method fetch_row(), method fetch_array() juga diakses dari objek $result yang merupakan hasil pemanggilan query.
Method fetch_array() membutuhkan 1 argumen, berupa string yang berisi bagaimana cara array hasil method akan diakases. String ini bisa dipilih dari salah satu nilai: MYSQLI_NUM, MYSQLI_ASSOC atau MYSQLI_BOTH. Lebih lengkap tentang perbedaan ketiga nya telah kita bahas dalam tutorial mengenai fungsi mysql_fetch_array().
Cara ketiga yang akan kita bahas untuk menampilkan data mysqli, adalah dengan method fetch_object(). Berikut contoh pengunaanya:
<?php // buat koneksi dengan MySQL, gunakan database: universitas $link = new mysqli("localhost", "root", "qwerty", "universitas"); // jalankan query $result = $link->query("SELECT * FROM mahasiswa_ilkom"); // tampilkan query while ($row=$result->fetch_object()) { Â Â echo $row->nim." ".$row->nama." ".$row->umur." "; Â Â echo $row->tempat_lahir." ".$row->IPK; Â Â echo "<br />"; } ?>
Cara penggunaan method fetch_object() hampir sama dengan method-method sebelumnya, yakni di akses dari objek $result hasil menjalankan query MySQL.
Dalam tutorial PHP MySQL kali ini kita telah membahas cara penggunaan mysqli extension yang berbasis object. Tutorial mysqli ini dan juga tutorial sebelumnya tentang mysqli procedural saya buat sesingkat mungkin tanpa menggunakan prosedur untuk penanganan kesalahan. Misalnya, bagaimana mengecek apakah koneksi dengan MySQL sudah terhubung atau belum.
Dalam tutorial berikutnya, akan kita bahas secara mendalam mengenai beberapa fungsi dan method mysqli yang digunakan untuk penanganan kesalahan.
Pintar kayaknya admin duniailkom.com… bookmark duniailkom.com =D
Ah, biasa aj gan, masih banyak yang lebih pintar dari saya :)
Gan mau tanya ni kalo mau edit referensinya id gimana ya? yang slah dimana ya ini
prepare("SELECT * FROM mahasiswa WHERE id =?");
$data_mahasiswa->bind_param('i', $_GET['id']);
$data_mahasiswa->execute();
$data_mahasiswa->fetch_array(MYSQLI_ASSOC);
?>
pas dijalanin munculnya "Fatal error: Call to undefined method mysqli_stmt::fetch_array()1"
Pesan error itu muncul karena di dalam mysqli prepared statement tidak mengenal method fetch_array() (jika mengakses langsung dari object seperti itu). Setahu saya, kita harus menggunakan method get_result() dulu, baru ambil nilainya dengan fetch_array().
Kira2, seperti ini gan:
Penjelasan lebih lanjut saya bahas pada tutorial Cara Menampilkan Data dengan mysqli Prepared Statements.
Kalau agan nanya referensi id-nya, itu didapat dari form gan, bagian yang saya bold ini:
$data_mahasiswa->bind_param('i', $_GET['id']);
Sepertinya halaman ini merupakan halaman pemrosesan form y?
Jika di dalam database terdapat data mahasiswa dengan id=1, maka agan bisa mencoba kode diatas dengan mengubahnya menjadi sebagai berikut:
$id=1;
$data_mahasiswa->bind_param('i', $id);
Sehingga tidak perlu melalui form. Semoga bisa membantu :)
gan ane juga numpang tanya ni, pas ane coba ngetikkan d notepad++
query("SELECT * FROM mahasiswa_ilkom");
// tampilkan query
while ($row=$result->fetch_object())
{
echo $row->nim." ".$row->nama." ".$row->umur." ";
echo $row->tempat_lahir." ".$row->IPK;
echo "";
}
?>
yg tampil d mozila ko malah gini ya:
Warning: mysqli::mysqli(): (HY000/1045): Access denied for user 'root'@'localhost' (using password: YES) in D:\xampp\htdocs\belajar\dun.11.2.php on line 3
Warning: mysqli::query(): Couldn't fetch mysqli in D:\xampp\htdocs\belajar\dun.11.2.php on line 6
Fatal error: Call to a member function fetch_object() on a non-object in D:\xampp\htdocs\belajar\dun.11.2.php on line 9
Mohon pncerahannya, skalian ksih contoh solusi biar tampilnya gan ya , mksih sbelumnya :)
Sepertinya ada kesalahan nama user dan password MySQL-nya, coba pastikan kembali user untuk MySQL. Dalam contoh diatas saya menggunakan 'qwerty' sebagai password user root. Tetapi biasanya untuk instalasi XAMPP, password root tidak di set.
Coba ubah baris pertama menjadi seperti ini:
$link = new mysqli("localhost", "root", "", "universitas");
Kalau masih error, coba ikuti tutorial PHP MySQL ini dari awal, saya sudah jelaskan mengenai langkah2nya.. mudah2an bisa membantu :)
Di source code pake MYSQLI
// tampilkan query
while ($row=$result->fetch_array(MYSQLI_ASSOC))
tapi dipenjelasan kok tidak ada I-nya
String ini bisa dipilih dari salah satu nilai: MYSQL_NUM, MYSQL_ASSOC atau MYSQL_BOTH.
Wah, seharusnya memang menggunakan MYSQLI_NUM, MYSQLI_ASSOC atau MYSQLI_BOTH.
Kurang teliti nih saya.. :(
Terimakasih banyak koreksinya gan… :)
Langsung saya update tutorialnya….
saya sedang membuat paging, tapi class dari link tidak dapat tampil di browser. Padalah di atas statement program sudah saya include-kan
// Dapatkan jumlah data keseluruhan
$query2 = mysqli_query($konek, "select * from perjanjian");
$jmldata = mysqli_num_rows($query2);
// Dapatkan jumlah halaman
$jmlhalaman = $p->jumlahHalaman($jmldata, $batas);
// Cetak link navigasi halaman
$linkHalaman = $p->navHalaman($_GET['halaman'], $jmlhalaman);
//echo("$linkHalaman");
Mohon bantuannya ya min
Thx ya :)
Cat: di depan echo seharusnya tidak ada tanda //
saya gunakan tanda // karena skrip yang saya maksudkan tidak dapat tampil di comment ini
Mohon maaf gan, saya belum bisa bantu nih.
Kalau kodenya sudah menggunakan objek seperti ini, harus dilihat keseluruhan kode programnya. Termasuk struktur database, cara penggunaan method, dll. Jika classnya dibuat sendiri, akan butuh waktu lama untuk mempelajarinya.
Apabila agan menggunakan framework atau sejenisnya, mungkin bisa dipelajari lagi manual framework tersebut.
mas, mau tanya cara mencegah data yang sama dengan PHP OOP ini gimana ya, ane cari cari dari website lain gak ada, adanya sih PHP aja tidak berbasis OOP
Baru 2 hari berkunjung ke duniailkom, ternyata betah sekali saya kalau berkunjung ke duniailkom, banyak tutorial tutorial yang saya butuhkan, terima kasih duniailkom dengan semua informasinya.
Sama2 gan, senang tutorialnya bisa dengan mudah dipahami…
Simple dan sangat jelas. tnkz gan udh share.. tutorialnnya sy ikuti satu persatu :)
Terima kasih byk gan, website ini membantu byk utk newbie seperti saya :D
God bless you gan
Sama2 gan, saya juga senang tutorialnya bisa bermanfaat :)
sy punya database trus disitu ada tabel event nah sala satu fieldnya itu berisi lang dan lat map nah sy pengen lat dan lang itu tampil diweb saya tapi dalam bentuk link dengan simbol g+ menuju alamat di map mohon bantuannya untuk saya yang baru belajar pemograman
Wah cukup panjang kalau dijabarkan semuanya mas. Minimal mesti paham HTML, CSS, PHP, dan MySQL. HTML untuk menampilkan linknya, CSS untuk menyesuaikan simbol g+, PHP untuk mengambil data dari database menggunakan query MySQL. Belum lagi jika websitenya menggunakan CMS seperti wordpress.
Mungkin bisa di pelajari dulu seluruh tutorial yang ada di duniailkom ini. Kalau dirasa belum cukup, bisa cari buku yang lebih lengkap membahas web programming :)
trus ada ga referensi buku yang membahas terkait contoh kasus saya
Gan saya punya program untuk menginput data orang, fieldnya sekitar 25 ada name, ref_code, date, image dan lain",
data sudah berhasil di input gan, setelah data di input, data harus di tampilkan tetapi hanya 4 field saja yg ditampilkan, salah satu field saya beri link, yaitu ref_code, ketika salah satu data diklik (di bagian ref_code) akan menampilkan seluruh data dan foto orang tersebut, tetapi hanya orang yg di klik saja yg muncul..
Permasalahnnya
data sudah muncul lengkap, tetapi fotonya tidak muncul, ketika perintah filternya saya hapus fotonya muncul tapi hanya foto yg paling atas di table database yg muncul dengan kata lain foto dan data orangnya tidak sinkron…
mohon pencerahannya gan terima kasih
Ini mesti pelajari seluruh kodenya gan, dan perlu waktu yang tidak sebentar nih. Tp kalau melihat masalahnya, kemungkinan besar salah query MySQLnya, bisa di cek lagi ketika link di klik, query apa yang dijalankan.
Printah query ini bisa di print dulu dengan perintah echo, lalu cek ke phpmyadmin, apakah sudah sesuai atau belum.
kalo ini gimana gan..??
<?php
$link = new mysqli("localhost", "root", "", "databaru");
$sql = $link->query("SELECT A.id_berita, B.nm_kategori, A.judul, A.headline, A.pengirim, A.tanggal FROM berita A, kategori B WHERE A.id_kategori=B.id_kategori ORDER BY A.id_berita DESC LIMIT 0,5");
while ($hasil=$sql->fetch_array(MYSQLI_ASSOC)) {
$id_berita = $hasil['id_berita'];
$kategori = stripslashes ($hasil['nm_kategori']);
$judul = stripslashes ($hasil['judul']);
$headline = nl2br(stripslashes($hasil['headline']));
$pengirim = stripslashes ($hasil['pengirim']);
$tanggal = stripslashes ($hasil['tanggal']);
?>
waktu index-nya di load, muncul notice..
Fatal error: Call to a member function fetch_array() on boolean in C:\xampp\htdocs\berita\index.php on line 18
Kemungkinan besar query yang dijalankan ada yang salah tuh gan, bisa dicek lagi apakah perintah:
"SELECT A.id_berita, B.nm_kategori, A.judul, A.headline, A.pengirim, A.tanggal FROM berita A, kategori B WHERE A.id_kategori=B.id_kategori ORDER BY A.id_berita DESC LIMIT 0,5"
Sudah memberikan hasil yang diinginkan (bisa di cek di phpmyadmin dulu).
Tapi waktu saya ubah pake mysql_connect pake xampp 1.7.7 yang server lama, bisa gan.. . ?
Kalau pakai mysql_connect(), pemanggilan querynya pakai fungsi mysql_query() kan ya? berarti kode programnya sudah berubah semua gan.
Sedangkan kode program yang agan tulis sebelum ini menggunakan mysqli object. Jadi menurut saya g bisa disamakan…
gan mau tanya nih, kalo syntax error gini yang salah dimananya yah?
Notice: Use of undefined constant koperasisp – assumed 'koperasisp' in C:\xampp\htdocs\koperasisp\classes\class.koperasisp.php on line 6
Di cek dulu gan, apakah koperasisp di baris ke-6 itu variabel atau apa.
Kalau variabel, harusnya ditulis dengan tanda dollar: $koperasisp. Kalau itu sebuah konstanta, mesti deklarasikan lebih dulu. Atau mungkin ada baris yang terhapus / kurang include.
Gan mau nanya nih, Tolong dijawab ya gan.
Itu hasil dari class maupun method 'MySQLI Object Oriented Style', sama atau tidak dengan hasil function-function 'MySQLI Procedural Style' yaitu berupa resource(Jika berhasil, variabel $link akan menampung data hasil koneksi, jika gagal berisi tipe data boolean FALSE), Karena hal ini saya bingung mau buat cek berhasil atau tidak koneksinya, yang ada malah keluar ERROR.
Ini source kode nya, sengaja saya buat salah, Tapi yang keluar tetap aja 'Koneksi Berhasil'. Bingung saya gan :
$obj_conn = new mysqli('localhost', 'KA27Aroot', '', 'dunia_ilkom');
if($obj_conn) {
echo 'Koneksi Berhasil. <br/><br/>';
} else {
die('Koneksi Gagal. <br/><br/>');
}
Ini ERROR nya Gan :
Warning: mysqli::__construct(): (HY000/1044): Access denied for user ''@'localhost' to database 'dunia_ilkom' in C:\xampp\htdocs\netinnet\php\PHP-MySQLI\index.php on line 161
Koneksi Berhasil.
Oke gan, itu kenapa ya ? Kenapa hasilnya 'Koneksi Berhasil.' padahal user 'KA27Aroot' tidak ada, dan Diatas udah dijelasin bahwa 'Acceess denied for user …..'. Tolong jelasin dong gan …
Sekalian gan, buatkan cara untuk cek koneksinya. Thank's Gan. Tolong dijawab ya gan……….
ini errornya Fatal error: Call to a member function fetch_object() on a non-object in
$server = "localhost";
$username = "root";
$password = "";
$database = "db";
$link = new mysqli($server, $username, $password, $database) or die ("koneksi Gagal");
$id=$_GET['id'];
$sql= "select * from tlemari where kd_lmr = $id";
$query = $link -> query($sql);
$result = $query->fetch_row()
itu errornya dimana ya? dah saya cari kemana" tetep gak ada solusi, mungkin bermasalah di koding yang ini
$sql= "select * from tlemari where kd_lmr = $id";
$query = $link -> query($sql);
$result = $query->fetch_row()
koding ini buat nampilin data
Jadi gini, dalam prosedural menghitung data ada
mysql_result($query, 0);
Permasalahannya untuk versi OOP dari itu apa ya gan?
Gan fungsinya titik koma di perkondisian if else apa ya ? kalau gak pake ada ngaruhnya gak. Ini bagian tentang mysqli object trus dipakein exception.
if ($mysqli->error){
throw new Exception($mysqli->error, $mysqli->errno);
}
else {
echo "Database 'ilkoom' berhasil di buat / sudah tersedia <br>";
};
// Pilih database "ilkoom"
$mysqli->select_db("ilkoom");
if ($mysqli->error){
throw new Exception($mysqli->error, $mysqli->errno);
}
else {
echo "Database 'ilkoom' berhasil di pilih <br>";
};
Jika maksudnya tanda titik koma setelah penutup kurang kurawal, yakni " }; ", maka itu tidak pengaruh. Malah seharusnya titik koma disitu tidak perlu ditulis.