Вход Регистрация
* Feduk

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

  1. <?php
  2. /**
  3. * Защита от sql инъекций при помощи pdo_mysql
  4. * автор: Nc_Soft
  5. * 19.12.10
  6. */
  7.  
  8. $host = 'localhost'; //хост
  9. $db = 'database_name'; //база данных
  10. $user = 'root'; //юзер
  11. $password = 'password'; //пароль
  12.  
  13. //соединяемся
  14. $db = new PDO("mysql:host=$host;dbname=$db", $user, $password,
  15. array(PDO::MYSQL_ATTR_INIT_COMMAND => "SET NAMES utf8"));
  16.  
  17. //делаем sql запрос на создание таблицы (id|user|time)
  18. $q = $db->prepare("CREATE TABLE IF NOT EXISTS `test` (
  19. `id` int(10) unsigned NOT NULL auto_increment,
  20. `user` varchar(20) NOT NULL,
  21. `time` timestamp NOT NULL default CURRENT_TIMESTAMP,
  22. PRIMARY KEY (`id`)
  23. ) ENGINE=MyISAM DEFAULT CHARSET=utf8; ");
  24.  
  25. //выполняем запрос
  26. $q->execute();
  27.  
  28. //теперь давайте добавим запись
  29. $q = $db->prepare("INSERT INTO test SET user=? ");
  30. $q->execute(array('имя1'));
  31.  
  32. /*
  33. в таблице добавилась запись
  34. обратите внимание, что я не использовал никакие функции для фильтрации
  35. (mysql_real_escape_string и подобные), просто обозначит placeholder куда вставить
  36. значение через ?, а потом при execute задал значение массивом
  37. */
  38.  
  39. //давайте теперь изменим добавленную запись
  40. //получаем последний добавленный ид
  41. $id = $db->lastInsertId();
  42.  
  43. //запрос на update
  44. $db->prepare("UPDATE test SET user=? WHERE id=? ")->execute(array("новое ' имя", $id));
  45.  
  46. /*
  47. Обратите внимание, сейчас я воспользовался цепочкой вызовов ->()->
  48. чтобы не заводить переменную $q как в примерах выше.
  49. Параметры в массиве должны идти в строгом порядке, как в запросе,
  50. действительно, будет нелепо перепутать id и name местами ;)
  51. Даже не смотря на то, что в параметре присутствует кавычка запрос выполянется нормально,
  52. pdo все экранирует самостоятельно.
  53. */
  54.  
  55. //если не нравятся ? или хотите изменить порядок, можно заюзать именнованные параметры
  56. $db->prepare("INSERT INTO test SET user=:user ")->execute(array(':user'=>'новый юзер'));
  57. /*
  58. Теперь массив с параметрами не такой безликий как раньше, какой способ задания параметров
  59. выбрать решайте сами
  60. */
  61.  
  62. //Ну и напоследок: как извлекать записи
  63. $q = $db->prepare("SELECT * FROM test");
  64. $q->execute();
  65. $data = $q->fetchAll();
  66.  
  67. print_r($data);
» Описание: Защита от sql инъекций при помощи pdo_mysql
» Время добавления: 14 Авг 2014 в 17:04
» Посмотров: 1509
» textarea
» Рейтинг: [+0 | -0]
Комментарии [0]
Онлайн: 2
Реклама