A prepared statement is basically a template that can be reused with different variables. There are some benefits and drawbacks to prepared statements that should be considered:
Pros:
- Prevents SQL injection without needing to escape data
- Allows you to repeat the same statement without the overhead of parsing the SQL
- Allows you to send raw binary data in packets
- Creates code that is easier to read by separating SQL logic from data
- Slower for one time queries since it requires two requests from the MySQL server
- Does not work for ALL queries (only data manipulation queries)
- Placeholders can only be used for values and not table/column names
PHP supports MySQL prepared statements using the Mysqli (MySQL Improved) extension in PHP 5 via the MySQLi_STMT class. They are fairly easy to use once you get used to the differences from writing raw SQL statements. This tutorial will explain how to use prepared statements.
Inserting Data
First, we need a valid database connection...
Code: Select all
<?php
// Create Mysqli object
$db = new mysqli('localhost', 'username', 'password', 'database');
Code: Select all
// Create statement object
$stmt = $db->stmt_init();
Code: Select all
// Create a prepared statement
if($stmt->prepare("INSERT INTO `table` (`name`, `age`, `bio`) VALUES (?, ?, ?)")) {
Code: Select all
// Bind your variables to replace the ?s
$stmt->bind_param('sis', $name, $age, $bio);
// Set your variables
$name = 'John Doe';
$age = 32;
$bio = 'Unknown...';
Code: Select all
// Execute query
$stmt->execute();
// Close statement object
$stmt->close();
}
Now we will use a prepared statement to fetch data from the database. Much of the process is the same, so I'll only explain the differences.
Code: Select all
// Create statement object
$stmt = $db->stmt_init();
// Create a prepared statement
if($stmt->prepare("SELECT `name`, `bio` FROM `table` WHERE `age` = ?")) {
// Bind your variable to replace the ?
$stmt->bind_param('i', $age);
// Set your variable
$age = 32;
// Execute query
$stmt->execute();
Code: Select all
// Bind your result columns to variables
$stmt->bind_result($name, $bio);
Code: Select all
// Fetch the result of the query
while($stmt->fetch()) {
echo $name . ' - ' . $bio; // John Doe - Unknown...
}
// Close statement object
$stmt->close();
}
This was just a basic overview of prepared statements in PHP. If you have experience with MySQL in PHP, this should give you enough to replace your regular queries with prepared statements.
Courtesy of http://www.ultramegatech.com/blog/2009/ ... ts-in-php/