Защита от 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);
8 11 0
0

Нет фото
DESANT * 1.13
• 5 янв 2016, 16:42


как подключить то?

0

Нет фото
• 13 авг 2015, 00:52


*