Prepared Statement sekarang sangat populer dan banyak di gunakan oleh developer di dunia untuk Query ke Database. Selain (menurut kalkulasi developer) lebih cepat, prepared statement juga membuat Query SQL kita lebih aman. 

Prepared statement di MySQL 

Ada 3 workflow utama penggunaan Prepared statemtn di MySQL yaitu:
  • PREPARE – Prepares statement for execution.
  • EXECUTE – Executes a prepared statement preparing by a PREPARE statement.
  • DEALLOCATE PREPARE – Releases a prepared statement.
  

Contoh nya :

PREPARE stmt1 FROM 'SELECT nama, alamat,usia
                    FROM user
                    WHERE id_user = ? ';
 
SET @pc = '234';
EXECUTE stmt1 USING @pc;
 
DEALLOCATE PREPARE stmt1;

dari Query diatas, dapat dilihat bahwa pertama kita menyiapkan/prepare statement nya dulu, dan id_user nya di ganti dengan '?'. setelah itu buat variable @pc untuk menyimpan value sebenarnya dari id_user   , lalu statement tersebut kita  Execute/Eksekusi.

Deallocate Prepare sebenarnya tidak perlu kitaa tuliskan lagi, karena sudah secara difault di dealokasi oleh server. 

Prepared statement di PHP PDO

di PDO ,query ke MySQL bisa dengan mudah kita sisipkan fitur ini.
$dbhost 	= "localhost";
$dbname		= "codetrash";
$dbuser		= "root";
$dbpass		= "";

// database connection
$conn = new PDO("mysql:host=$dbhost;dbname=$dbname",$dbuser,$dbpass);

$id_category = '1'; //misal id nya yg 1

// query, pake tanta ?
$sql = "SELECT * FROM category WHERE id_categry = ? ";
$q = $conn->prepare($sql);
$q->execute(array($id_category));


$q->setFetchMode(PDO::FETCH_BOTH);

// fetch
while($r = $q->fetch()){
  print_r($r);
}

Contoh lain


//pake tanda : diikuti variable nya
$stmt $dbh->prepare("INSERT INTO tutorial (title, content) VALUES (:title, :content)");
$stmt->bindParam(':title'$title);
$stmt->bindParam(':content'$content);

// insert one row
$title 'Contoh PDO';
$content = 'PDO itu sangat dianjurkan';
$stmt->execute();

// insert another row 
$title 'Share aplikasi rumah sakit';
$content = 'berikut adalah contoh aplikasi rumah sakit...';
$stmt->execute();

dgn PDO kita jg menggunakan paramter Binding seperti contoh diatas
$stmt->bindParam(':title'$title);
$stmt->bindParam(':content'$content);

di Codeigniter bisa dilakukan seperti berikut
$sql = "SELECT * FROM user WHERE id = ? 
                AND status = ? AND name = ?";
$this->db->query($sql, array(1, 'active', 'ganjar'));


Happy Coding !!!

Ref :
mysqltutorial
PHPnet