Pengertian
Tutorial ini akan membahas cara mengelola database dari
script PHP. Di
samping itu, Anda juga akan mempelajari cara INSERT data ke
database menggunakan PHP. Sebelum
melanjutkan tutorial ini, ada baiknya Anda membaca dan mempelajari tutorial
kami terdahulu terkait PHP dan database – menghubungkan PHP ke database.
Yang Harus Anda Lakukan
Untuk memahami tutorial ini dengan lebih baik, sebaiknya Anda:
- login ke
control panel hosting Anda
Langkah 1 – Membuat tabel
Buatlah tabel terlebih dulu. Langkahnya sendiri sangat mudah.
Anda hanya harus menggunakan phpMyAdmin yang
berada di control panel hosting. Karena di tutorial sebelumnya kami telah
membahas langkah-langkah untuk membuat database MySQL, maka di tutorial ini
tidak akan kami jelaskan lebih lanjut.
Kami akan membuat tabel yang diberi nama Students untuk
database u266072517_name. Untuk
membuat tabel baru, klik tombol Create
Table. Setelah itu, akan muncul halaman baru di mana Anda bisa
memasukkan semua informasi yang dibutuhkan ke dalam tabel.
Setup ini merupakan setup yang paling mudah dilakukan jika Anda
ingin membuat tabel. Untuk informasi selengkapnya terkait struktur
tabel/database dan tipe pengaturan yang bisa Anda terapkan pada kolom, baca
panduan phpMyAdmin.
Berikut penjelasan mengenai fungsi dari masing-masing kolom yang
akan kami gunakan:
- Name – Nama kolom, akan ditampilkan di
bagian atas tabel.
- Type – Pilih tipe kolom. Sebagai
contoh, kami memilih varchar karena
kami ingin memasukkan tipe string berupa nama (yang tentu saja terdiri
atas huruf dan bukannya angka).
- Length/Values – Untuk menentukan maksimum
panjang entry yang boleh Anda buat di kolom.
- Index – Kami menggunakan index “Primary”
untuk kolom “ID”. Sebaiknya buat satu kolom ID saat membuat tabel. Kolom
ini berfungsi untuk menghitung entri tabel dan dibutuhkan apabila Anda
hendak mengonfigurasikan hubungan antartabel. Kami juga memberi
tanda “A_I” yang
berarti Auto
Increment. Secara otomatis, kolom akan menghitung entri
(1, 2, 3, 4…).
Klik Save untuk
menyimpan tabel yang telah berhasil dibuat.
Langkah 2 – Menulis kode untuk Input Database dengan PHP
Opsi 1 – Metode MySQLi
Buat koneksi terlebih dulu ke database. Untuk caranya, bisa Anda
baca di tutorial kami. Setelah itu, Anda bisa lanjut dengan query SQL INSERT. Berikut contoh
kode dengan koneksi dasar dan metode insertion:
1.
<?php
2.
$servername = "mysql.hostinger.co.uk";
3.
$database = "u266072517_name";
4.
$username = "u266072517_user";
5.
$password = "buystuffpwd";
6.
7.
// Create connection
8.
9.
$conn = mysqli_connect($servername,
$username, $password, $database);
10.
11.// Check connection
12.
13.if (!$conn) {
14.die("Connection failed:
" . mysqli_connect_error());
15.}
16.
17.echo "Connected successfully";
18.
19.$sql = "INSERT INTO Students (name, lastname, email)
VALUES ('Thom', 'Vial', 'thom.v@some.com')";
20.if (mysqli_query($conn, $sql)) {
21.echo "New record created successfully";
22.} else {
23.echo "Error: "
. $sql . "<br>" . mysqli_error($conn);
24.}
25.mysqli_close($conn);
26.
27.?>
Bagian pertama kode (3-18 baris)
adalah koneksi aktual yang terhubung ke database. Untuk arti dari masing-masing
kode, sudah pernah kami bahas sebelumnya. Apabila Anda ingin menggali informasi
serupa, bisa merujuk ke artikel kami tentang cara terhubung ke database.
Oke, mari kita mulai dari baris kode 19:
1.
$sql = "INSERT INTO Students (name, lastname, email)
VALUES ('Thom', 'Vial', 'thom.v@some.com')";
Baris di atas merupakan baris terpenting dalam barisan kode yang
kami gunakan. Baris ini bertanggung jawab atas apa pun yang nantinya kita
pelajari bersama di tutorial ini – input database dengan PHP. INSERT INTO adalah
suatu statement yang berfungsi untuk menambahkan data ke dalam tabel database
yang telah ditentukan. Misalnya, kami akan menambahkan data ke tabel Students.
Di dalam tanda kurung, terdapat kolom tabel yang ingin kami
tambahkan value-nya: (name,
lastname, email). Data akan ditambahkan sesuai urutan yang
telah ditentukan. Jika kami menulis (email,
lastname, name), maka urutan valuenya akan berubah.
Setelah INSERT INTO, ada statement VALUES. Di statement
ini, kami menyertakan value ke kolom yang telah ditentukan sebelumnya. Dengan
demikian, masing-masing kolom merepresentasikan value yang telah dibuat.
Sebagai contoh pada kolom yang telah kami buat: name = Thom, lastname = Vial, email =
thom.v@some.com.
Hal terpenting lainnya adalah karena kami hanya
menjalankan SQL
query dengan menggunakan kode PHP, maka SQL query harus di
set di antara quote. Sebagai contoh, apa pun yang diletakkan di antara quote
dan setelah $sql = adalah SQL query.
Barisan kode berikutnya (baris 20-22) mengecek apakah
query berhasil dijalankan atau tidak:
1.
if (mysqli_query($conn, $sql)) {
2.
echo "New record created successfully";
3.
}
Barisan kode terakhir (baris 22-24) menampilkan
pesan error jika query tidak berhasil dijalankan:
1.
else {
2.
echo "Error: " . $sql . "<br>" . mysqli_error($conn);
3.
}
Opsi 2 – Metode PHP Data Object (PDO)
Sama seperti opsi 1, hal yang harus dilakukan terlebih dulu
adalah membuat koneksi ke database. Di opsi 2, koneksi tersebut dijalankan
dengan membuat PDO object yang baru – baca tutorial kami sebelumnya untuk informasi
lebih lengkap. Karena koneksi ke database MySQL adalah PDO object, maka Anda
harus menggunakan berbagai ‘metode’ PDO (fungsi apa pun yang menjadi bagian
dari object mana pun) untuk membuat dan menjalankan query. Metode object akan
terlihat seperti ini:
1.
$the_Object->the_Method();
Dengan PDO, Anda dapat ‘membuat’ kode SQL sebelum dijalankan.
SQL diperiksa dan ‘diperbaiki’ sebelum benar-benar diaktifkan. SQL injection
attack yang disederhanakan dapat diaktifkan hanya dengan mengetikkan kode SQL
ke field yang ada di form. Misalnya:
1.
// User writes this in the
username field of a login form
2.
john"; DROP DATABASE
user_table;
3.
4.
// The final query becomes this
5.
"SELECT
* FROM user_table WHERE username = john"; DROP DATABASE user_table;
Karena ada kode SQL yang benar secara sintaksis, maka tanda
titik koma membuat DROP
DATABASE user_table menjadi SQL query yang baru, dan tabel
user Anda dihapus. Prepared statement tidak akan memperbolehkan karakter ” dan
; menghentikan original
query dan instruksi gagal DROP DATABASE tidak akan pernah
dijalankan.
Jika ingin mengirim atau
menerima data dari database dengan PDO, sebaiknya gunakan prepared statement.
Untuk menggunakan prepared statement, Anda harus menuliskan
variable baru yang memaggil metode prepare() dari
database object.
Apabila kode benar:
1.
<?php
2.
$servername = "mysql.hostinger.com";
3.
$database = "u266072517_name";
4.
$username = "u266072517_user";
5.
$password = "buystuffpwd";
6.
$sql = "mysql:host=$servername;dbname=$database;";
7.
$dsn_Options = [PDO::ATTR_ERRMODE => PDO::ERRMODE_EXCEPTION];
8.
9.
// Create a new connection to the
MySQL database using PDO, $my_Db_Connection is an object
10.try {
11.$my_Db_Connection = new PDO($sql,
$username, $password, $dsn_Options);
12.echo "Connected successfully";
13.} catch (PDOException $error) {
14.echo 'Connection error: '
. $error->getMessage();
15.}
16.
17.// Set the variables for the person we want to add to the
database
18.$first_Name = "Thom";
19.$last_Name = "Vial";
20.$email = "thom.v@some.com";
21.
22.// Here we create a variable that calls the prepare() method of
the database object
23.// The SQL query you want to run is entered as the parameter,
and placeholders are written like this :placeholder_name
24.$my_Insert_Statement = $my_Db_Connection->prepare("INSERT INTO Students
(name, lastname, email) VALUES (:first_name, :last_name, :email)");
25.
26.// Now we tell the script which variable each placeholder
actually refers to using the bindParam() method
27.// First parameter is the placeholder in the statement above -
the second parameter is a variable that it should refer to
28.$my_Insert_Statement->bindParam(:first_name,
$first_Name);
29.$my_Insert_Statement->bindParam(:last_name,
$last_Name);
30.$my_Insert_Statement->bindParam(:email,
$email);
31.
32.// Execute the query using the data we just defined
33.// The execute() method returns TRUE if it is successful and
FALSE if it is not, allowing you to write your own messages here
34.if ($my_Insert_Statement->execute()) {
35.echo "New record created successfully";
36.} else {
37.echo "Unable to create record";
38.}
39.
40.// At this point you can change the data of the variables and
execute again to add more data to the database
41.$first_Name = "John";
42.$last_Name = "Smith";
43.$email = "john.smith@email.com";
44.$my_Insert_Statement->execute();
45.
46.// Execute again now that the variables have changed
47.if ($my_Insert_Statement->execute()) {
48.echo "New record created successfully";
49.} else {
50.echo "Unable to create record";
51.}
Pada baris 28, 29, dan 30, kami menggunakan metode bindParam() dari
database object. Pun terdapat metode bindValue() yang benar-benar berbeda.
- bindParam() – Metode ini mengevaluasi data
pada saat metode execute() dijalankan.
Ketika pertama kali menjalankan metode execute(), script melihat
bahwa $first_Name berkorespondensi
dengan “Thom”, bind value tersebut, dan menjalankan query. Pada saat
menjalankan metode execute() kedua,
script melihat bahwa $first_Name sekarang
berkorespondensi dengan “John”, bind value tersebut, dan kembali
menjalankan query dengan value yang baru. Satu hal yang harus Anda ingat,
kami hanya membuat query sekali dan kembali menggunakannya dengan data
yang berbeda pada suatu titik yang tak sama dalam script.
- bindValue() – Metode ini mengevaluasi data
segera setelah bindValue() dijalankan.
Karena value $first_Name telah di-set ke “Thom”
pada saat bindValue() dijalankan,
maka value tersebut akan digunakan setiap kali method execute() dipanggil
untuk $my_Insert_Statement.
Kami menggunakan kembali variabel $first_Name dan
membuat value baru untuk kedua kalinya. Jika Anda mengecek database setelah
menjalankan script ini, maka Anda memiliki dua nama yang telah ditentukan,
meskipun variabel $first_Name setara
dengan “John” yang terletak di akhir script. Perlu diingat, PHP mengevaluasi
keseluruhan script sebelum benar-benar menjalankannya.
Apabila Anda mengupdate script untuk menggantikan bindParam dengan bindValue, maka Anda
harus insert dua kali ke MySQL ‘Thom Vial” dalam database dan John Smith tidak akan
diikutsertakan.
Langkah 3 – Mengonfirmasi Masalah dan Error yang Berhasil
Diatasi
Apabila query berhasil dijalankan dan di-insert ke database
MySQL, maka kita akan melihat pesan ini:
Mengatasi error yang kerap terjadi
MySQLi
Umumnya jika terjadi error, maka pesan error akan langsung
ditampilkan. Misalnya, terjadi kesalahan di syntax, lalu pesan ini muncul:
![]() |
Seperti yang kita lihat, tidak ada kesalahan apa pun di bagian
pertama kode. Koneksi yang dibuat berhasil diaktifkan. Namun, SQL query
berhenti.
"Error: INSERT INTO Students {name, lastname, email} VALUES ('Thom', 'Vial', 'thom.v@some.com')
You have an error in your SQL syntax; check the manual that
corresponds to your MySQL server version for the right syntax to use near ‘{name,
lastname, email} VALUES (‘Thom’, ‘Vial’, ‘thom.v@some.com’)’ at line 1″
Adanya syntax error membuat script gagal dijalankan. Error-nya
adalah:
1.
$sql = "INSERT INTO Students {name, lastname, email}
VALUES ('Thom', 'Vial', 'thom.v@some.com')";
Bisa dilihat kalau kami menggunakan tanda kurung kurawal dan
bukannya tanda kurung biasa. Tentu saja penulisan ini tidak tepat dan
menyebabkan script tidak berfungsi sebagaimana mestinya sehingga muncul pesan
error.
PDO
Di baris 7 koneksi PDO, mode error di-set ke ‘display all
exceptions’. Jika Anda tidak menyertakan mode error ini dan semisal terjadi
kegagalan pada query, maka Anda tidak akan mendapatkan pesan error sama sekali.
Namun, apabila mode error disertakan, maka Anda bisa mengetahui di mana letak
terjadinya error. Biasanya mode error hanya digunakan bilama Anda sedang
mengembangkan script karena dapat mengekspos database dan nama tabel, yang
sebenarnya ingin Anda sembunyikan dari siapa pun yang hendak mengakses
data Anda. Jika Anda tidak sengaja mengetikkan tanda kurung kurawal dan
bukannya tanda kurung biasa, maka tampilan error seperti ini yang akan muncul:
Fatal error: Uncaught exception 'PDOException' with message 'SQLSTATE[42000]: Syntax error or access violation: 1064 You have an error in your SQL syntax; <code>check the manual that corresponds to your MySQL server version for the right syntax to use near '{name, lastname, email} VALUES ('Thom', 'Vial', 'thom.v@some.com')' at line 1"</code>
Masalah lain yang mungkin akan Anda alami:
- Kolom yang
salah (kolom yang tidak muncul atau terdapat kesalahan penulisan)
- Salah satu
tipe value dialihkan ke tipe kolom lainnya. Misalnya, jika kami menuliskan
nomor 47 di
kolom Nama,
maka pesan error akan muncul. Seharusnya, 47 adalah string
value. Namun, jika kita menambahkan nomor di antara quote,
misalnya “47”, maka
tidak akan terjadi pesan error karena nomor yang kita maksudkan akan
ditambahkan ke kolom sebagai string.
- Memasukkan
data ke tabel yang tidak ada atau terjadi kesalahan penulisan pada tabel.
Baca tutorial untuk mengatasi pesan error atau mengecek
error_log agar semua error di atas dapat diperbaiki dengan mudah.
Data entry yang berhasil ditambahkan bisa dilihat di database
kami. Berikut contoh tabel, tempat kami menambahkan data, apabila dilihat melalui phpMyAdmin.
Kesimpulan
Sekarang Anda sudah tahu cara input data ke database dengan php
menggunakan MySQLi dan PDO. Selain itu, Anda
juga sudah tahu cara mengatasi koneksi error yang sering kali terjadi. Jika
saat ini Anda sedang belajar soal coding atau membuat website, maka Anda wajib
mengetahui cara memasukkan data ke database menggunakan PHP.
Komentar