PHP: Akses Basis Data Agi Putra Kharisma, S.T., M.T. Metode Koneksi/Akses Basis Data MySQL dengan PHP • mysql (prosedural) • mysqli (prosedural & OOP) • PDO (OOP) PDO vs MySQLi Proses Umum Pembacaan Basis Data MySQL Dengan PHP 1. 2. 3. 4. 5. Buat koneksi ke MySQL Buat query Eksekusi query Ambil hasil query Ulangi proses 2 – 5 sampai semua data yang dibutuhkan terambil 6. Tutup koneksi ke MySQL Contoh Skrip Koneksi ke MySQL $db = new PDO( 'mysql:host=localhost; dbname=testdb; charset=utf8', 'username', 'password'); Mengambil Data Dari Tabel Basis Data • fetch $stmt = $db->query('SELECT * FROM table'); while($row = $stmt->fetch(PDO::FETCH_ASSOC)) { echo $row['field1'].' '. $row['field2']; //etc... } • fetchAll $stmt = $db->query('SELECT * FROM table'); $results = $stmt->fetchAll(PDO::FETCH_ASSOC); //use $results Mengetahui Jumlah Baris Yang Terpilih Oleh SELECT $stmt = $db->query('SELECT * FROM table'); $row_count = $stmt->rowCount(); PERHATIAN: Kode di atas (rowCount()) hanya berlaku untuk driver MySQL, tidak bisa digunakan untuk basis data dari vendor lain. INSERT, UPDATE, DELETE $affected_rows = $db->exec("UPDATE table SET field='value'"); echo $affected_rows.' were affected' DANGER...!!! SQL Injection Contoh SQL Injection SELECT * WHERE user = 'admin' #' AND pass='' DELETE FROM users WHERE user='terserah' OR 1=1 # AND pass='' *keterangan: tanda (#) pada SQL adalah komentar, sehingga kode di sebelah kanannya tidak akan dieksekusi Prepared Statement ANTI SQL-INJECTION!!! $stmt = $db->prepare("SELECT * FROM table WHERE id=:id AND name=:name"); $stmt->execute(array(':name' => $name, ':id' => $id)); $rows = $stmt->fetchAll(PDO::FETCH_ASSOC); Contoh Prepared Statement Untuk INSERT $stmt = $db->prepare("INSERT INTO table(field1,field2,field3,field4,field5) VALUES(:field1,:field2,:field3,:field4,:fiel d5)"); $stmt->execute(array(':field1' => $field1, ':field2' => $field2, ':field3' => $field3, ':field4' => $field4, ':field5' => $field5)); $affected_rows = $stmt->rowCount(); Contoh Prepared Statement Untuk UPDATE $stmt = $db->prepare("UPDATE table SET name=:name WHERE id=:id"); $stmt->execute(array(':name' => $name, ':id' => $id); $affected_rows = $stmt->rowCount(); Contoh Prepared Statement Untuk DELETE $stmt = $db->prepare("DELETE FROM table WHERE id=:id"); $stmt->execute(array(':id' => $id)); $affected_rows = $stmt->rowCount(); Latihan Buat aplikasi “Buku Alamat” dengan ketentuan: 1. Data yang dimuat meliputi: Nama, Alamat, Nomor HP 2. Fitur yang tersedia meliputi: Tampilkan Buku Alamat, Tambah, Ubah, Hapus, Pencarian Berdasarkan Nama. 3. Gunakan implementasi dengan PHP berorientasi objek dan akses basis data menggunakan Prepared Statement PDO Referensi • http://wiki.hashphp.org/PDO_Tutorial_for_M ySQL_Developers • http://code.tutsplus.com/tutorials/why-youshould-be-using-phps-pdo-for-databaseaccess--net-12059 Next • Model-View-Controller (MVC) Bahan bacaan: Membangun Framework Sederhana http://bertzzie.com/knowledge/frameworkphp/index.html