Защита от sql инъекций при помощи pdo_mysql

<?php
/**
 * Защита от sql инъекций при помощи pdo_mysql
 * автор: Nc_Soft
 * 19.12.10
 */

$host = 'localhost'; //хост
$db = 'database_name'; //база данных
$user = 'root'; //юзер
$password = 'password'; //пароль

//соединяемся
$db = new PDO("mysql:host=$host;dbname=$db", $user, $password, 
array(PDO::MYSQL_ATTR_INIT_COMMAND => "SET NAMES utf8"));  

//делаем sql запрос на создание таблицы (id|user|time)
$q = $db->prepare("CREATE TABLE IF NOT EXISTS `test` (
  `id` int(10) unsigned NOT NULL auto_increment,
  `user` varchar(20) NOT NULL,
  `time` timestamp NOT NULL default CURRENT_TIMESTAMP,
  PRIMARY KEY  (`id`)
) ENGINE=MyISAM DEFAULT CHARSET=utf8; ");

//выполняем запрос
$q->execute();

//теперь давайте добавим запись
$q = $db->prepare("INSERT INTO test SET user=? ");
$q->execute(array('имя1'));

/*
в таблице добавилась запись
обратите внимание, что я не использовал никакие функции для фильтрации
(mysql_real_escape_string и подобные), просто обозначит placeholder куда вставить 
значение через ?,  а потом при execute задал значение массивом
*/

//давайте теперь изменим добавленную запись
//получаем последний добавленный ид
$id = $db->lastInsertId(); 

//запрос на update
$db->prepare("UPDATE test SET user=? WHERE id=? ")->execute(array("новое ' имя", $id));

/*
Обратите внимание, сейчас я воспользовался цепочкой вызовов ->()-> 
чтобы не заводить переменную $q как в примерах выше.
Параметры в массиве должны идти в строгом порядке, как в запросе, 
действительно, будет нелепо перепутать id и name местами ;)
Даже не смотря на то, что в параметре присутствует кавычка запрос выполянется нормально, 
pdo все экранирует самостоятельно.
*/

//если не нравятся ? или хотите изменить порядок, можно заюзать именнованные параметры
$db->prepare("INSERT INTO test SET user=:user ")->execute(array(':user'=>'новый юзер'));
/*
Теперь массив с параметрами не такой безликий как раньше, какой способ задания параметров 
выбрать решайте сами
*/

//Ну и напоследок: как извлекать записи
$q = $db->prepare("SELECT * FROM test");
$q->execute();
$data = $q->fetchAll();

print_r($data);

//подробную информацию о pdo_mysql вы всегда можете найти в гугле