PDO (PHP Data Objects) adalah php extension untuk mengakses database, sama seperti mysql_query atau mysql_fetch_array. Saat ini fungsi seperti mysql_query dan mysql_fetch_array sudah di-deprecated dan akan segera dihapus. Oleh karena itu kita perlu segera beralih menggunakan PDO atau MySQLi untuk menyimpan, edit atau hapus data. PDO bisa dipakai untuk mengakses beberapa database berbeda, sedangkan MySQLi hanya untuk database mysql. Jika saat ini kita menggunakan database MySQL dan di kemudian hari berganti menggunakan database PostgreSQL maka kita tidak perlu lagi mengubah kode yang sudah dibuat.
Sebelumnya kita membuat koneksi ke database menggunakan fungsi mysql_connect seperti:
$host = "localhost";
$user = "root";$password = "";
$database_name = "test";
mysql_connect($host, $user, $password);
mysql_select_db($database_name);
Menggunakan PDO juga cukup mudah dan hampir mirip, seperti:
$host = "localhost";
$user = "root";$password = "";
$database_name = "test";
$pdo = new PDO("mysql:host=$host;dbname=$database_name", $user, $password);
Kemudian dengan PDO kita bisa menggatur error mode, mengatur bagaimana penanganan error yang terjadi. Misal throw error yang terjadi.
$host = "localhost";
$user = "root";
$password = "";
$database_name = "test";
$pdo = new PDO("mysql:host=$host;dbname=$database_name", $user, $password, array(
PDO::ATTR_ERRMODE => PDO::ERRMODE_EXCEPTION
));
Misalkan kita punya sebuah tabel dengan nama siswa dengan struktur seperti:
Nama Field | Tipe Data | Keterangan |
---|---|---|
nis | varchar(20) | Nomor Induk siswa, Primary Key |
nama | varchar(50) | |
jenis_kelamin | char(1) | |
tgl_lahir | date |
Sebelumnya kita menggunakan mysql_query untuk menyimpan data seperti:
<?php
$host = "localhost";
$user = "root";
$password = "";
$database_name = "test";
mysql_connect($host, $user, $password);
mysql_select_db($database_name);
$query = "insert into siswa (nis,nama,jenis_kelamin,tgl_lahir) values ('001','Budi', 'L','1987-06-01')";
hasil = mysql_query($query);
if($hasil){
echo "Data siswa telah disimpan";
}else{
echo "Error! gagal menyimpan data siswa:".mysql_error();
}
Menggunakan PDO menjadi sedikit berbeda, seperti:
<?php
$host = "localhost";
$user = "root";
$password = "";
$database_name = "test";
$pdo = new PDO("mysql:host=$host;dbname=$database_name", $user, $password, array(
PDO::ATTR_ERRMODE => PDO::ERRMODE_EXCEPTION
));
try{
$query = $pdo->prepare("insert into siswa (nis,nama,jenis_kelamin,tgl_lahir)
values (:nis,:nama, :jenis_kelamin,:tgl_lahir)");
$dataSiswa = array(
':nis' => '001',
':nama' => 'Budi',
':jenis_kelamin' => 'L',
':tgl_lahir' => '1987-06-01'
);
$query->execute($dataSiswa);
echo "Data siswa telah disimpan";
}catch(PDOException $e){
echo "Error! gagal menyimpan data siswa:".$e->getMessage();
}
Menampilkan data menggunakan PDO hampir sama dengan mysql_fetch_array. Sebelumnya kita menggunakan mysql_fetch_array untuk menampilkan data seperti:
<?php
$host = "localhost";
$user = "root";
$password = "";
$database_name = "test";
mysql_connect($host, $user, $password);
mysql_select_db($database_name);
$query = mysql_query("select * from siswa");
?>
<table>
<tr>
<td>Nis</td>
<td>Nama</td>
<td>Jenis Kelamin</td>
<td>TGL Lahir</td>
</tr>
<?php while($siswa = mysql_fetch_array($query)){?>
<tr>
<td><?php echo $siswa['nis']?></td>
<td><?php echo $siswa['nama']?></td>
<td><?php echo $siswa['jenis_kelamin']?></td>
<td><?php echo $siswa['tgl_lahir']?></td>
</tr>
<?php }?>
</table>
Jika menggunakan PDO akan menjadi
<?php
$host = "localhost";
$user = "root";
$password = "";
$database_name = "test";
$pdo = new PDO("mysql:host=$host;dbname=$database_name", $user, $password, array(
PDO::ATTR_ERRMODE => PDO::ERRMODE_EXCEPTION
));
$query = $pdo->prepare("select * from siswa");
$query->execute();
?>
<table>
<tr>
<td>Nis</td>
<td>Nama</td>
<td>Jenis Kelamin</td>
<td>TGL Lahir</td>
</tr>
<?php while($siswa = $query->fetch()){?>
<tr>
<td><?php echo $siswa['nis']?></td>
<td><?php echo $siswa['nama']?></td>
<td><?php echo $siswa['jenis_kelamin']?></td>
<td><?php echo $siswa['tgl_lahir']?></td>
</tr>
<?php }?>
</table>
Mengedit data menggunakan PDO hampir mirip dengan cara menyimpan data di atas. Menggunakan mysql_query untuk mengedit data akan seperti:
<?php
$host = "localhost";
$user = "root";
$password = "";
$database_name = "test";
mysql_connect($host, $user, $password);
mysql_select_db($database_name);
$query = "update siswa set nama = 'Budi Setio',jenis_kelamin = 'L',tgl_lahir='1988-06-01' where nis='001'";
hasil = mysql_query($query);
if($hasil){
echo "Data siswa telah diupdate";
}else{
echo "Error! gagal mengedit data siswa:".mysql_error();
}
sedangkan menggunakan PDO akan menjadi:
<?php
$host = "localhost";
$user = "root";
$password = "";
$database_name = "test";
$pdo = new PDO("mysql:host=$host;dbname=$database_name", $user, $password, array(
PDO::ATTR_ERRMODE => PDO::ERRMODE_EXCEPTION
));
try{
$query = $pdo->prepare("update siswa set nama = :nama, jenis_kelamin = :jenis_kelamin,
tgl_lahir = :tgl_lahir where nis = :nis");
$data = array(
':nama' => 'Budi Setio',
':jenis_kelamin' => 'L',
':tgl_lahir' => '1988-06-01',
':nis' => '001'
);
$query->execute($data);
echo "Data siswa telah diupdate";
}catch(PDOException $e){
echo "Error! gagal mengedit data siswa:".$e->getMessage();
}
Mengapus data dengan PDO kurang lebih sama seperti edit data tapi lebih sederhana. Jika menggunakan mysql_query akan seperti:
<?php
$host = "localhost";
$user = "root";
$password = "";
$database_name = "test";
mysql_connect($host, $user, $password);
mysql_select_db($database_name);
$nis = "001";
$hasil = mysql_query("delete from siswa where nis='".$nis."'");
if($hasil){
echo "Data siswa sudah dihapus";
}else{
echo "Gagal menghapus data siswa:".mysql_error();
}
Sedangkan jika menggunakan PDO akan menjadi:
<?php
$host = "localhost";
$user = "root";
$password = "";
$database_name = "test";
$pdo = new PDO("mysql:host=$host;dbname=$database_name", $user, $password, array(
PDO::ATTR_ERRMODE => PDO::ERRMODE_EXCEPTION
));
try{
$query = $pdo->prepare("delete from siswa where nis = :nis");
$query->execute(array(
':nis' => '001'
));
echo "Data siswa sudah dihapus";
}catch(PDOException $e){
echo "Gagal menghapus data siswa:".$e->getMessage();
}
Beberapa manfaat yang dapat diperoleh dari menggunakan PDO. Pertama PDO membantu mencegah SQL injection, PDO secara otomatis akan mengquote inputan user. Kedua PDO bisa digunakan untuk mengakses beberapa database berbeda . Jika hari ini kita menggunakan database MySQL, pada saat berganti database ke PostgreSQL maka tidak perlu lagi mengubah kode yang sudah dibuat. Yang ketiga PDO sudah mendukung database transaction . Yang keempat PDO lebih cepat bila dibandingkan dengan menggunakan fungsi mysql_query.