<?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 вы всегда можете найти в гугле ?>