Week ke - 5
OUTLINE MATERI :
1. Introduction to Database
2. Using PDO
3. Inserting data
4. Querying data
5. Updating
6. Deleting data
A. Introducing to Database
Data mungkin merupakan landasan sebagian besar aplikasi web. Tentu saja,
aplikasi Anda harus cantik, cepat, tanpa cela, dan sebagainya, tetapi jika satu hal penting
bagi pengguna, itulah data yang dapat Anda kelola untuk mereka. Dari sini kami dapat
menyimpulkan bahwa mengelola data adalah salah satu hal terpenting yang harus
dipertimbangkan saat mendesain aplikasi Anda.
Mengelola data tidak hanya melibatkan penyimpanan file read-only dan
membacanya saat diperlukan, seperti yang telah kami lakukan sejauh ini, tetapi juga
menambahkan, mengambil, memperbarui, dan menghapus informasi individual. Untuk
ini, kami memerlukan alat yang mengkategorikan data kami dan membuat tugas-tugas ini
lebih mudah bagi kami, dan inilah saat database mulai bekerja.
Database adalah alat untuk mengelola data. Fungsi dasar database adalah
memasukkan, mencari, memperbarui, dan menghapus data, meskipun kebanyakan sistem
database melakukan lebih dari ini. Basis data diklasifikasikan ke dalam dua kategori
berbeda bergantung pada cara mereka menyimpan data: basis data relasional dan non-
relasional.
Database relasional menyusun data dengan cara yang sangat mendetail, memaksa
pengguna untuk menggunakan format yang ditentukan dan memungkinkan untuk
membuat koneksi - yaitu, hubungan - antara berbagai bagian informasi. Database non-
relasional adalah sistem yang menyimpan data dengan cara yang lebih santai, seolah-olah
tidak ada struktur yang jelas. Meskipun dengan definisi yang sangat kabur ini Anda
mungkin berasumsi bahwa setiap orang ingin menggunakan database relasional, kedua
sistem ini sangat berguna; itu tergantung bagaimana Anda ingin menggunakannya.
Dalam mata kuliah ini, kita akan fokus pada database relasional, karena database
tersebut banyak digunakan dalam aplikasi web kecil, di mana tidak ada data dalam
jumlah besar. Ini karena aplikasi biasanya berisi data yang berhubungan satu sama lain;
B. Using PDO
Kita telah bekerja dengan MySQL selama ini dan Anda sudah memiliki ide bagus
tentang apa yang dapat Anda lakukan dengannya. Namun, berhubungan dengan
pelanggan dan melakukan pencarian secara manual bukanlah tujuan kita. Yang ingin
kami capai adalah aplikasi kami dapat menggunakan database secara otomatis. Untuk
melakukan ini, kita akan menggunakan sekumpulan kelas yang disertakan dengan PHP
yang memungkinkan Anda untuk terhubung ke database dan menjalankan kueri dari
kode.
PHP Data Objects (PDO) adalah kelas yang menghubungkan dan berinteraksi
dengan database. Ini adalah cara kerja database yang populer untuk pengembang PHP,
meskipun ada cara lain yang tidak akan kami bahas di sini. Dengan PDO Anda dapat
bekerja dengan sistem database yang berbeda, jadi Anda tidak hanya terikat pada
MySQL. Pada bagian berikut ini kita akan melihat bagaimana menghubungkan ke
database, memasukkan data dan mengambilnya dengan kelas ini.
Untuk koneksi ke database, praktik yang baik adalah menjaga kredensial (yaitu,
pengguna dan kata sandi) terpisah dari kode dalam file konfigurasi. Kami sudah memiliki
file ini sebagai config / app.json sejak kita bekerja dengan kelas Config. Mari tambahkan
kredensial yang benar untuk database kita. Jika Anda memiliki konfigurasi default, file
konfigurasinya akan terlihat seperti ini bukan:
{
"db": {
"user": "root",
"password": ""
}
}
Pengembang biasanya menentukan informasi lain yang terkait dengan koneksi,
seperti host, port, atau nama database. Ini tergantung pada bagaimana aplikasi Anda
Perhatikan juga bahwa kita akan memanggil metode setAttribute dari instance
PDO. Metode ini memungkinkan Anda mengatur beberapa opsi untuk koneksi; dalam hal
ini, ini menetapkan format hasil yang berasal dari MySQL. Opsi ini memaksa MySQL
untuk mengembalikan array yang kuncinya adalah nama bidang, yang jauh lebih berguna
daripada default, mengembalikan kunci numerik berdasarkan urutan bidang. Menyetel
opsi ini sekarang akan memengaruhi semua kueri yang dijalankan dengan instance $ db,
alih-alih menyetel opsi setiap kali kami menjalankan kueri.
Cara termudah untuk mendapatkan data dari database Anda adalah dengan
menggunakan metode kueri. Metode ini menerima kueri sebagai string dan
mengembalikan daftar baris sebagai array. Mari kita lihat contoh: setelah menginisialisasi
koneksi database, tulis yang berikut ini, misalnya di file init.php:
Pencarian ini mencoba untuk memasukkan semua buku ke dalam database dengan
mengurutkannya berdasarkan judul. Ini bisa menjadi konten dari fungsi seperti
getAllBooks, yang digunakan saat kami menampilkan katalog kami. Setiap baris adalah
larik yang berisi semua bidang sebagai kunci dan data sebagai nilai.
Jika Anda menjalankan aplikasi di browser Anda, Anda akan mendapatkan hasil
sebagai berikut:
Kode ini juga menggunakan cara baru untuk merender string: heredoc. Kami
menyertakan string <<< SQL dan SQL ;, keduanya dalam baris yang berbeda, bukan
tanda kutip. Keuntungan dari ini adalah kemampuan untuk menulis string multiline
dengan tabel atau ruang kosong lainnya, dan PHP akan menghargai ini. Kita dapat
membuat kueri yang mudah dibaca alih-alih menulisnya dalam satu baris atau harus
menghubungkan berbagai string bersama. Perhatikan bahwa SQL adalah token untuk
mewakili awal dan akhir string, tetapi Anda dapat menggunakan teks apa pun yang Anda
inginkan.
Pertama kali Anda menjalankan aplikasi dengan kode ini, kueri akan berhasil
dijalankan, sehingga hasilnya adalah Boolean true. Namun, jika Anda menjalankannya
lagi, itu akan mengembalikan false karena ISBN yang kami masukkan sama, tetapi
kami telah menyetel batasan ke unik.
Sangat membantu untuk mengetahui bahwa pencarian gagal, tetapi lebih baik jika
kita mengetahui alasannya. Contoh PDO memiliki metode errorInfo yang
mengembalikan array dengan informasi kesalahan terbaru. Kunci 2 berisi deskripsi, jadi
mungkin itu yang akan lebih sering kita gunakan. Perbarui kode sebelumnya dengan yang
berikut ini:
$query = <<<SQL
INSERT INTO book (isbn, title, author, price)
Hasilnya adalah pencarian gagal karena nomor ISBN digandakan. Sekarang kita
dapat membuat pesan kesalahan yang lebih bermakna untuk pelanggan kita atau hanya
untuk tujuan debugging.
Dua fungsi sebelumnya sangat berguna saat Anda perlu menjalankan kueri cepat
yang selalu sama. Namun, pada contoh kedua, Anda mungkin memperhatikan bahwa
string kueri tidak terlalu berguna karena selalu menyisipkan buku yang sama. Meskipun
benar bahwa Anda dapat mengganti nilai dengan variabel, ini bukanlah praktik yang baik
karena variabel ini biasanya berasal dari sisi pengguna dan mungkin berisi kode
berbahaya. Itu selalu lebih baik untuk membersihkan nilai-nilai ini terlebih dahulu.
PDO menyediakan kemampuan untuk menyiapkan pernyataan, yaitu kueri dengan
parameter. Anda dapat menentukan parameter untuk bidang yang akan diubah dalam
kueri dan kemudian menetapkan nilai ke parameter ini. Mari kita ambil contoh dulu,
sebagai berikut:
$query = 'SELECT * FROM book WHERE author = :author';
$statement = $db->prepare($query);
$statement->bindValue('author', 'George Orwell');
$statement->execute();
$rows = $statement->fetchAll();
var_dump($rows);
Pencarian normal, kecuali ia memiliki: author alih-alih string penulis yang ingin
kita temukan. Ini adalah parameter dan kami akan mengidentifikasinya dengan awalan:.
Metode prepare mendapatkan query sebagai argumen dan mengembalikan instance
PDOStatement. Kelas ini berisi beberapa metode untuk mengikat nilai, menjalankan
Jika Anda mencoba kode ini, Anda akan melihat bahwa hasilnya sangat mirip
dengan menggunakan query; namun, kali ini kodenya jauh lebih dinamis karena Anda
dapat menggunakannya kembali untuk pembuat mana pun yang Anda perlukan.
Ada cara berbeda untuk mengikat nilai ke parameter kueri dibandingkan dengan
metode bindValue. Anda dapat menyiapkan array di mana kuncinya adalah nama
parameter dan nilainya adalah nilai yang ingin Anda tetapkan, dan kemudian Anda dapat
mengirimkannya sebagai argumen pertama dari metode eksekusi. Cara ini sangat berguna
karena Anda biasanya memiliki array ini yang sudah disiapkan dan Anda tidak perlu
memanggil bindValue berkali-kali dengan isinya. Tambahkan kode ini untuk
mengujinya:
$query = <<<SQL
INSERT INTO book (isbn, title, author, price)
Dalam contoh terakhir ini, kami membuat buku baru dengan hampir semua
parameter, tetapi kami tidak menentukan ID, yang merupakan perilaku yang diinginkan,
karena kami ingin MySQL memilih buku yang valid untuk kami. Tetapi bagaimana jika
Anda ingin mengetahui ID dari baris yang disisipkan? Anda dapat meminta MySQL
untuk buku dengan nomor ISBN yang sama dan baris yang dikembalikan akan berisi ID
tersebut, tetapi tampaknya ini membutuhkan banyak pekerjaan. Sebagai gantinya, PDO
memiliki metode lastInsertId, yang mengembalikan ID terakhir yang disisipkan oleh
kunci utama, sehingga menghemat pencarian ekstra.
C. Inserting data
Kami telah membuat tabel yang sempurna untuk menyimpan data kami, tetapi
sejauh ini tabel tersebut kosong. Sudah saatnya kita mengisi mereka. Kami telah
menunda momen ini karena memodifikasi tabel dengan data lebih sulit daripada saat
kosong.
Untuk memasukkan data ini, kami menggunakan perintah INSERT INTO. Perintah
ini menggunakan nama tabel, bidang yang ingin Anda isi, dan data untuk setiap bidang.
Perhatikan bahwa Anda dapat memilih untuk tidak menentukan nilai suatu bidang, dan
ada beberapa alasan untuk melakukannya, yaitu:
• Bidang memiliki nilai default dan kami ingin menggunakannya untuk baris
khusus ini
Mari kita lihat cara menambahkan baris. Mari kita mulai dengan tabel klien kita, dengan
tabel dasar dan tabel premium, sebagai berikut:
Kesalahan dikembalikan dengan kode kesalahan dan pesan kesalahan, dan baris
tentu saja tidak dimasukkan. Pesan kesalahan biasanya berisi informasi yang cukup untuk
memahami dan menyelesaikan masalah. Jika tidak, kami selalu dapat mencoba mencari
web menggunakan kode kesalahan dan mencatat apa yang dikatakan oleh dokumentasi
resmi atau pengguna lain tentangnya. Jika Anda perlu menambahkan beberapa baris ke
tabel yang sama dan berisi bidang yang sama, ada versi perintah yang lebih pendek, di
mana Anda dapat menentukan bidang dan kemudian menentukan grup nilai untuk setiap
baris. Mari kita lihat cara menggunakannya dalam menambahkan buku ke tabel buku
kita, sebagai berikut:
Sekarang kita memiliki buku dan pelanggan, mari tambahkan beberapa data
historis tentang pelanggan yang meminjam buku. Untuk melakukan ini, gunakan nomor
buku dan pelanggan, seperti pada kode berikut:
D. Querying data
Ini memakan cukup banyak waktu, tetapi akhirnya kami berada di bagian yang
paling menarik - dan berguna - mengenai database: kueri data. Kueri data mengacu pada
meminta MySQL untuk mengembalikan baris dari tabel yang ditentukan dan secara
opsional memfilter hasil ini dengan serangkaian aturan. Anda juga dapat memilih untuk
Ini memakan cukup banyak waktu, tetapi akhirnya kami berada di bagian yang
paling menarik - dan berguna - mengenai database: kueri data. Kueri data mengacu pada
meminta MySQL untuk mengembalikan baris dari tabel yang ditentukan dan secara
opsional memfilter hasil ini dengan serangkaian aturan. Anda juga dapat memilih untuk
mendapatkan bidang tertentu alih-alih seluruh baris. Untuk melakukan kueri data, kami
menggunakan pernyataan SELECT, sebagai berikut:
Salah satu cara termudah untuk mengkueri data adalah dengan menentukan
bidang minat setelah SELECT dan tentukan tabel dengan kata kunci FROM. Karena kami
tidak menambahkan filter - biasanya dikenal sebagai kondisi - ke kueri, kami memiliki
semua baris di sana. Terkadang ini adalah perilaku yang diinginkan, tetapi yang paling
umum adalah menambahkan kondisi ke kueri untuk hanya mendapatkan baris yang kita
butuhkan. Gunakan kata kunci WHERE untuk mencapai ini.
mysql> SELECT firstname, surname, type FROM customer
-> WHERE id = 1;
+-----------+---------+---------+
| firstname | surname | type |
+-----------+---------+---------+
| Han | Solo | premium |
+-----------+---------+---------+
1 row in set (0.00 sec)
Kami meminta semua buku dengan judul dimulai dengan 1, dan kami mendapat
tiga baris. Bisa dibayangkan betapa bergunanya operator ini, terutama saat kita
mengimplementasikan mesin pencari dalam aplikasi kita.
Seperti di PHP, MySQL juga memungkinkan Anda untuk menambahkan operator
logika, yaitu operator yang menggunakan operan dan melakukan operasi logis,
menghasilkan nilai Boolean. Operator logika yang paling umum adalah, seperti di PHP,
Contoh ini sangat mirip dengan yang sebelumnya, tetapi kami menambahkan
ketentuan tambahan. Kami meminta semua judul dimulai dengan 1 dan apakah ada stok.
Inilah mengapa salah satu buku tidak ditampilkan karena tidak memenuhi kedua syarat
tersebut. Anda dapat menambahkan ketentuan sebanyak yang Anda butuhkan dengan
operator logika, tetapi perlu diingat bahwa operator DAN lebih diutamakan daripada
ATAU. Jika Anda ingin mengubah prioritas ini, Anda selalu dapat meletakkan ekspresi
dalam tanda kurung, seperti di PHP. Sejauh ini kami telah mengambil bidang tertentu
saat melakukan kueri data, tetapi kami dapat meminta semua bidang dalam tabel tertentu.
Untuk melakukan ini kita hanya menggunakan * wildcard di SELECT. Mari pilih semua
bidang untuk pelanggan melalui kode berikut:
Anda bisa mendapatkan informasi lebih dari sekedar bidang. Misalnya, Anda
dapat menggunakan COUNT untuk mendapatkan jumlah baris yang memenuhi kondisi
yang diberikan daripada mendapatkan semua kolom. Dengan cara ini, ini lebih cepat
daripada mendapatkan semua kolom dan kemudian menghitungnya saat Anda
menghemat waktu dengan mengurangi ukuran respons. Mari kita lihat seperti apa:
Seperti yang Anda perhatikan, jawabannya adalah 1, yang berarti hanya ada satu
buku pinjaman yang memenuhi persyaratan. Namun, periksa kondisinya; Anda akan
melihat bahwa kami menggunakan operator logika terkenal lainnya: NOT. NOT
menyangkal ungkapan seperti! lakukan di PHP. Perhatikan juga bahwa kami tidak
menggunakan tanda sama dengan untuk membandingkan dengan nilai nol. Di MySQL,
Anda harus menggunakan IS, bukan tanda sama dengan untuk membandingkannya
dengan NULL. Jadi, kondisi kedua akan terpenuhi jika buku yang dipinjam memiliki
tanggal akhir bukan nol.
Mari akhiri bagian ini dengan menambahkan dua fungsi lagi saat membuat kueri
data. Yang pertama adalah kemampuan untuk menentukan urutan baris harus
dikembalikan. Untuk melakukan ini, gunakan kata kunci ORDER BY diikuti dengan nama
bidang yang ingin Anda pesan. Anda juga bisa menentukan apakah ingin memesan dalam
E. Updating
Kami sudah tahu banyak tentang penyisipan dan pengambilan data, tetapi jika
aplikasi dapat melakukan ini sendiri, mereka akan sangat statis. Mengedit data ini sesuai
kebutuhan adalah hal yang membuat aplikasi dinamis dan yang memberi pengguna
beberapa nilai. Di MySQL, dan di sebagian besar sistem database, Anda memiliki dua
perintah untuk mengubah data: UPDATE dan DELETE. Mari kita bahas secara detail.
Saat memperbarui data di MySQL, yang paling penting adalah memiliki referensi
unik dari baris yang ingin Anda perbarui. Kunci primer sangat berguna untuk ini; Namun,
jika Anda memiliki tabel tanpa kunci utama, yang biasanya tidak demikian, Anda masih
dapat memperbarui baris berdasarkan bidang lain. Selain referensi, Anda akan
membutuhkan nilai baru dan tentu saja nama tabel dan field untuk diperbarui. Mari
pertimbangkan contoh yang sangat sederhana:
mysql> UPDATE book SET price = 12.75 WHERE id = 2;
Query OK, 1 row affected (0.00 sec)
Rows matched: 1 Changed: 1 Warnings: 0
Baris yang sama sekarang mengatakan 1 baris cocok seperti yang diharapkan,
tetapi 0 baris berubah. Alasannya adalah kami telah menetapkan harga buku ini pada
12.75, jadi MySQL tidak perlu melakukan apa-apa sekarang.
Seperti yang disebutkan sebelumnya, klausa WHERE adalah bit terpenting dalam
kueri ini. Terlalu sering kita melihat pengembang menjalankan query UPDATE yang tidak
bersalah secara apriori mengubah seluruh tabel karena mereka tidak memiliki klausa
WHERE; Jadi MySQL mencocokkan seluruh tabel sebagai baris yang valid untuk
diperbarui. Ini biasanya bukan maksud pengembang, juga tidak menyenangkan, jadi
cobalah untuk memastikan Anda selalu memberikan sekumpulan ketentuan yang valid.
Merupakan praktik yang baik untuk terlebih dahulu menuliskan query SELECT yang
mengembalikan baris yang perlu Anda edit, dan setelah Anda yakin bahwa kondisinya
cocok dengan kumpulan baris yang diinginkan, Anda dapat menulis kueri UPDATE.
Namun, terkadang skenario yang dimaksudkan adalah memengaruhi beberapa
baris. Bayangkan kita sedang melalui masa-masa sulit dan harus menaikkan harga semua
Pencarian ini tidak mengandung klausa WHERE karena kami ingin mencocokkan
semua buku kami. Perhatikan juga bahwa klausul SET menggunakan kolom harga untuk
mendapatkan nilai saat ini untuk harga, yang benar-benar valid. Terakhir, tuliskan jumlah
baris yang cocok dan dimodifikasi, yaitu 8 - seluruh rangkaian baris untuk tabel ini.
Untuk menyelesaikan subbagian ini, mari kita lihat bagaimana menggunakan
query UPDATE dari PHP ke PDO. Skenario umum adalah ketika kami ingin
menambahkan salinan dari buku yang sudah ada ke inventaris kami. Dengan adanya ID
buku dan jumlah buku opsional - secara default nilainya adalah 1 - kami akan
meningkatkan nilai inventaris buku ini sebanyak itu. Tulis fungsi ini di file init.php Anda:
F. Deleting data
Menghapus data hampir sama dengan mengupdatenya. Anda harus memberikan
klausa WHERE yang sesuai dengan baris yang ingin Anda hapus. Seperti halnya
memperbarui data, sangat disarankan untuk terlebih dahulu membangun query SELECT
yang akan mendapatkan baris yang ingin Anda hapus sebelum menjalankan perintah
DELETE. Jangan berpikir bahwa Anda membuang-buang waktu dengan metodologi ini;
seperti kata pepatah: ukur dua kali, potong sekali. Tidak selalu mungkin untuk
memulihkan data setelah menghapus baris!
Mari kita coba untuk menghapus sebuah buku dengan melihat bagaimana opsi
CASCADE yang kita setel sebelumnya berperilaku. Untuk melakukan ini, mari kita
request dulu daftar buku yang ada yang dipinjamkan melalui yang berikut ini:
Ada dua buku yang berbeda, 1 dan 4, masing-masing dipinjam dua kali. Ayo coba
hapus buku dengan ID 4. Pertama buat kueri seperti SELECT * FROM book WHERE id
= 4 untuk memastikan kondisi di klausa WHERE sudah benar. Jika Anda yakin, lakukan
pencarian berikut:
mysql> DELETE FROM book WHERE id = 4;
Query OK, 1 row affected (0.02 sec)
Seperti yang Anda lihat, kami hanya menentukan perintah DELETE FROM, diikuti
dengan nama tabel dan klausa WHERE. MySQL memberi tahu kita bahwa 1 baris
terpengaruh, yang masuk akal mengingat pernyataan SELECT sebelumnya yang kami
buat.
Jika kita kembali ke tabel borrow_books kita dan melakukan pencarian untuk
tabel yang sudah ada, kita akan melihat bahwa semua baris yang mengacu pada buku
dengan ID 4 telah hilang. Ini karena saat menghapus tabel books, MySQL
memperhatikan referensi ke foreign key, memeriksa apa yang harus dilakukan saat
menghapus CASCADE dalam kasus ini - dan juga menghapus baris di borrow_books.
Simak berikut ini:
mysql> SELECT book_id, customer_id FROM borrowed_books;
+---------+-------------+
| book_id | customer_id |
+---------+-------------+
| 1 | 1 |
| 1 | 2 |
+---------+-------------+
2 rows in set (0.00 sec)
1. PHP Data Objects (PDO) adalah kelas yang menghubungkan dan berinteraksi dengan
database. Dengan PDO Anda dapat bekerja dengan sistem database yang berbeda, jadi
Anda tidak hanya terikat pada MySQL.
2. perintah INSERT INTO digunakan untuk menambah data pada tabel.
3. Query data mengacu pada meminta MySQL untuk mengembalikan baris dari tabel yang
ditentukan dan secara opsional memfilter hasil ini dengan serangkaian aturan.
4. Mengedit data ini sesuai kebutuhan adalah hal yang membuat aplikasi dinamis dan yang
memberi pengguna beberapa nilai. Di MySQL, dan di sebagian besar sistem database,
Anda memiliki dua perintah untuk mengubah data: UPDATE dan DELETE.
1. Antonio Lopez. (2016). Learning PHP 7. Published by Packt Publishing Ltd. Livery
Place 35 Livery Street. Birmingham B3 2PB, UK. ISBN 978-1-78588-054-4.
.