Презентация на тему: Работа с БД. SQL Инъекции. PDO

Работа с БД. SQL Инъекции. PDO.
Добавляем данные
Удаляем данные
Обновляем данные
Синтаксис запросов
SQL инъекции. Суть проблемы
Простые меры безопасности
Исключения
Ловим исключение
Класс PDO
Подключение к БД
Первый запрос к БД
Вставка данных
Выборка
Выборка с использованием плейсхолдеров
Выборка с использованием плейсхолдеров
Задачи
Литература
1/18
Средняя оценка: 4.1/5 (всего оценок: 46)
Код скопирован в буфер обмена
Скачать (61 Кб)
1

Первый слайд презентации: Работа с БД. SQL Инъекции. PDO

Урок № 4

Изображение слайда
2

Слайд 2: Добавляем данные

$query="INSERT INTO myTable (fio,gender,actor) VALUES ('Ivanov',1,'Bruce')"; if ($result=mysql_query($query)){ $id=mysql_insert_id(); } else{ $id=-1; } if ($id<0){ echo "запрос не выполнен id=".$id; } else{ echo "запись успешно добавлена id=".$id; }

Изображение слайда
3

Слайд 3: Удаляем данные

$deleted_id=2; $query="DELETE FROM myTable WHERE id=".$deleted_id; if ($result=mysql_query($query)){ $id=mysql_affected_rows(); } else{ $id=-1; } if ($id<0){ echo " запрос не выполнен "; } else{ echo "вы успешно удалили ".$id." строк из таблицы"; }

Изображение слайда
4

Слайд 4: Обновляем данные

$updated_id=4; $query="UPDATE myTable SET actor='Williams',fio='Petrov' WHERE id=".$updated_id." LIMIT 1"; if ($result=mysql_query($query)){ $id=mysql_affected_rows(); } else{ $id=-1; } if ($id<0){ echo " запрос не выполнен "; } else{ echo "вы успешно обновили ".$id." строк из таблицы"; }

Изображение слайда
5

Слайд 5: Синтаксис запросов

$tablename=”myTable”; $query="INSERT INTO `“.$tablename.”` …..”; $field=“id”; $query=“… WHERE `“.$field.”`= ….”

Изображение слайда
6

Слайд 6: SQL инъекции. Суть проблемы

myScript.php?id=1 // листинг myScript.php $id=$_GET[‘id’]; $query=“SELECT * FROM myTable WHERE id=”.$id // вывод на экран данных о пользователе myScript.php?id=-1 UNION SELECT id,fio,gender, actor FROM myTable WHERE id=-152 myScript.php?id=-1 UNION SELECT id,fio,gender, actor FROM myTable WHERE id=1

Изображение слайда
7

Слайд 7: Простые меры безопасности

Проверяем входные данные If (is_numeric($_GET[‘id’])) Экранируем специальные символы $name=mysql_real_escape_string($name); $query=“SELECT * FROM table WHERE name=”.$name Не выводим никакой информации о структуре БД Используем FURL (Friendly URL)

Изображение слайда
8

Слайд 8: Исключения

function inverse($x) { if (!$x) { throw new Exception(' Деление на ноль.'); } else return 1/$x; }

Изображение слайда
9

Слайд 9: Ловим исключение

try{ inverse(0); } catch(Exception $e){ echo "выброшено исключение:".$e->getmessage(); } echo "<br> продолжаю работу"; $x=0; $p=1/$x; //Warning: Division by zero in … inverse(0);// Fatal error: Uncaught exception 'Exception' with message 'Деление на ноль.'

Изображение слайда
10

Слайд 10: Класс PDO

Удобство работы с различными СУБД Широкие возможности по защите от SQL инъекций mysql_query – deprecated (http://www.php.net/manual/ru/function.mysql-query.php)

Изображение слайда
11

Слайд 11: Подключение к БД

$base="testbase"; $user="root"; $pswd=""; $DBH=new PDO("mysql:host=localhost;dbname=".$base,$user,$pswd); $DBH->setAttribute( PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION );

Изображение слайда
12

Слайд 12: Первый запрос к БД

try{ //осуществлено подключение к бд //допускаем явную ошибку $DBH->prepare(' DELECT name FROM MyTable')->execute(); $DBH->prepare('SELECT fio FROM myTable')->execute(); } catch(PDOException $e){ echo "Хьюстон, у нас проблемы."; file_put_contents('PDOErrors.txt', $e->getMessage(), FILE_APPEND); }

Изображение слайда
13

Слайд 13: Вставка данных

$STH=$DBH->prepare("INSERT INTO myTable (fio,gender,actor) values (' Иванов ПС',1,'Никулин')"); $STH->execute(); //вставка с плейсхолдерами $data=array("Петрова НА",2,"Клуни"); $STH=$DBH->prepare("INSERT INTO myTable (fio,gender,actor) values (?,?,?)"); $STH->execute($data);

Изображение слайда
14

Слайд 14: Выборка

$STH=$DBH->query("SELECT * FROM myTable"); $STH->setFetchMode(PDO::FETCH_ASSOC); while($row = $STH->fetch()) { echo "id=".$row['id']."\n"; echo "fio=".$row['fio']. "\n"; echo "actor=".$row['actor']. "\n"; echo "gender=".$row['gender']. "\n"; echo "<hr>"; }

Изображение слайда
15

Слайд 15: Выборка с использованием плейсхолдеров

//именные плейсхолдеры $STH=$DBH->prepare("SELECT * FROM myTable WHERE id=:id"); $STH->setFetchMode(PDO::FETCH_ASSOC); $STH->bindValue(':id',5); $STH->execute(); $row = $STH->fetch();

Изображение слайда
16

Слайд 16: Выборка с использованием плейсхолдеров

//Простые плейсхолдеры echo " Простые плейсхолдеры< br>"; $STH=$DBH->prepare("SELECT * FROM myTable WHERE actor=? AND gender=?"); $STH->setFetchMode(PDO::FETCH_ASSOC); $STH->execute(array(' Никулин',1));

Изображение слайда
17

Слайд 17: Задачи

Создать форму для добавления новых пользователей в базу данных Реализовать всё на PDO и на mysql_query

Изображение слайда
18

Последний слайд презентации: Работа с БД. SQL Инъекции. PDO: Литература

http://habrahabr.ru/post/148151/ SQL injection для начинающих. Часть 1 http://www.php.net/manual/ru/ Безопасность >> Безопасность баз данных http://habrahabr.ru/post/148701/ Защита от SQL-инъекций в PHP и MySQL vk.com/bsuweb

Изображение слайда