Page Nav

HIDE
{fbt_classic_header}

Terbaru :

latest

3 Teknik Insert Data Dengan Prepared Statements di PDO PHP

Tanpa basa-basi langsung saja teknik tersebut kita lihat dalam contoh-contoh di bawah ini. Contoh 1 : <?php $host = "localhos...


Tanpa basa-basi langsung saja teknik tersebut kita lihat dalam contoh-contoh di bawah ini.

Contoh 1 :

<?php

$host = "localhost";
$dbname = "dbpknaceh";   
$user="root";
$pass="";

try {

    //buat koneksi dengan database
    $conn = new PDO("mysql:host=$host;dbname=$dbname", $user, $pass);

    //Set error mode   
    $conn->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
    //$conn->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_WARNING);
   
    // siapkan query (prepare)
    $stmt = $dbh->prepare('INSERT INTO pegawai VALUES (?, ?, ?, ?, ?)');

    // hubungkan data dengan variabel (bind)
    $stmt->bindParam(1, $npp);
    $stmt->bindParam(2, $nama_peg);
    $stmt->bindParam(3, $umur_peg);
    $stmt->bindParam(4, $tempatlahir_peg);
    $stmt->bindParam(5, $grade_peg);

    // siapkan "data" query
    $npp="06852";
    $nama_peg="M. Ghiffari EA";
    $umur_peg=21;
    $tempatlahir_peg="Sabang";
    $grade_peg=4;

    // jalankan query (execute)
    $stmt->execute();

    // tampilkan hasil proses query
    echo $stmt->rowCount()." data berhasil ditambahkan";

    // hapus koneksi
    $dbh = null;

} catch (PDOException $e) {
     // tampilkan pesan kesalahan jika koneksi gagal
     print "koneksi/query bermasalah: " . $e->getMessage() . "<br/>";
     die();
}

?>


Seperti yang pernah kita bahas pada mysqli extension, untuk menjalankan prepared statement, kita membutuhkan 3 langkah: prepare, bind dan execute.

Proses prepare dijalankan menggunakan method $dbh->prepare(). Method ini membutuhkan 1 argumen berupa perintah query yang akan dijalankan. Hasil dari method kemudian disimpan kedalam variabel $stmt. Variabel inilah yang akan kita gunakan selama menjalankan proses prepared statement.

Proses bind dilakukan menggunakan method $stmt->bindParam(). Method ini membutuhkan 2 argumen. Argumen pertama adalah angka urutan dari “tempat data” yang ditulis pada proses prepare. Karena pada proses prepare saya menuliskan: ‘INSERT INTO mahasiswa_ilkom VALUES (?, ?, ?, ?, ?)’, maka setiap tanda “?” harus di bind. Urutan tanda “?” inilah yang digunakan dalam argumen pertama method $stmt->bindParam().

Untuk argumen kedua method $stmt->bindParam() adalah variabel penampung yang nantinya akan diisi data. Selanjutnya setiap variable yang di defenisikan akan saya input nilai yang sesuai.

Setelah seluruh data diinput kedalam variabel, kita tinggal menjalankan method $stmt->execute() untuk menjalankan query prepared statement.

Jika anda menjalankan kode program diatas, hasilnya adalah sebagai berikut:
1 data berhasil ditambahkan

Contoh 2 :
Selain menggunakan tanda “?” untuk menandakan bagian dari data, PDO PHP juga menyediakan cara lain, yakni dengan menuliskan ‘nama untuk data’ atau dikenal dengan “named parameters prepared statements”.

Berikut adalah revisi contoh program menggunakan named parameters prepared statemant:

 <?php

$host = "localhost";
$dbname = "dbpknaceh";  
$user="root";
$pass="";

try {

    //buat koneksi dengan database
    $conn = new PDO("mysql:host=$host;dbname=$dbname", $user, $pass);

    //Set error mode  
    $conn->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
    //$conn->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_WARNING);
  
    // siapkan query (prepare)
    $stmt = $dbh->prepare('INSERT INTO pegawai VALUES
    (:npp, :nama_peg, :umur_peg, :tempatlahir_peg, :grade_peg)');

    // hubungkan data dengan variabel (bind)
    $stmt->bindParam(:npp, $npp);
    $stmt->bindParam(:nama_peg, $nama_peg);
    $stmt->bindParam(:umur_peg, $umur_peg);
    $stmt->bindParam(:tempatlahir_peg, $tempatlahir_peg);
    $stmt->bindParam(:grade_peg, $grade_peg);

    // siapkan "data" query
    $npp="06852";
    $nama_peg="M. Ghiffari EA";
    $umur_peg=21;
    $tempatlahir_peg="Sabang";
    $grade_peg=4;

    // jalankan query (execute)
    $stmt->execute();

    // tampilkan hasil proses query
    echo $stmt->rowCount()." data berhasil ditambahkan";

    // hapus koneksi
    $dbh = null;

} catch (PDOException $e) {
     // tampilkan pesan kesalahan jika koneksi gagal
     print "koneksi/query bermasalah: " . $e->getMessage() . "<br/>";
     die();
}

?>


Perbedaan dari kode program sebelumnya adalah pada cara penulisan query dan argumen method bindParam(). Kali ini kita menggunakan named variable (diawali dengan tanda “:”), seperti :nim_mhs, :nama_mhs, atau :umur_mhs. Named variable ini selanjutnya menjadi argumen pertama method $stmt->bindParam().

Contoh 3 :
Versi penulisaan terakhir prepared statement yang akan kita pelajari adalah dengan menggabungkan proses bind dan execute sekaligus. Agar cara ini bisa dijalankan, data dari prepared statement harus dibuat dalam bentuk array. Berikut contohnya:

<?php

$host = "localhost";
$dbname = "dbpknaceh";   
$user="root";
$pass="";

try {

    //buat koneksi dengan database
    $conn = new PDO("mysql:host=$host;dbname=$dbname", $user, $pass);

    //Set error mode   
    $conn->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
    //$conn->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_WARNING);
   
    // siapkan query (prepare)
    $stmt = $dbh->prepare('INSERT INTO pegawai VALUES
    (:npp, :nama_peg, :umur_peg, :tempatlahir_peg, :grade_peg)');

    // siapkan "data" query
    $npp="06852";
    $nama_peg="M. Ghiffari EA";
    $umur_peg=21;
    $tempatlahir_peg="Sabang";
    $grade_peg=4;

    // jalankan query (execute)
    $stmt->execute(array(':npp' => $npp, ':nama_peg' => $nama_peg, 

    ':umur_peg' => $umur_peg, ':tempatlahir_peg' => $tempatlahir_peg, 
    ':grade_peg' => $grade_peg));

    // tampilkan hasil proses query
    echo $stmt->rowCount()." data berhasil ditambahkan";

    // hapus koneksi
    $dbh = null;

} catch (PDOException $e) {
     // tampilkan pesan kesalahan jika koneksi gagal
     print "koneksi/query bermasalah: " . $e->getMessage() . "<br/>";
     die();
}

?>
 

Perbedaan dalam kode program diatas terletak dalam $stmt->execute(). Kali ini method $stmt->execute() kita input dengan array sebagai argumen yang akan menjadi ‘data’ untuk query. Dengan cara ini kita tidak perlu menggunakan method $stmt->bindParam().

Metode prepared statement yang kita pelajari disini bisa menjadi alternatif dari cara menjalankan query MySQL dengan metode biasa menggunakan $dbh->query(). Prepared statements mungkin masih relatif jarang anda jumpai, namun metoda ini menawarkan keamanan yang lebih dan banyak digunakan di dalam aplikasi PHP yang lebih luas seperti framework PHP.

Tidak ada komentar