Подготовленные выражения

На прошлом уроке мы уже рассмотрели способы подключения к базе данных для чтения или занесения информации. Также, мы рассматривали пример вставки новых данных:

1
2
3
# STH означает "Statement Handle"  
$STH = $DBH->prepare("INSERT INTO folks ( first_name ) values ( 'Cathy' )");  
$STH->execute();
Вы могли заметить, что данное действие можно выполнить одной строкой с помощью команды exec(), однако при пошаговом методе можно применять подготовленные выражения (prepared statements) — которые защищают от SQL-инъекций.

Подготовленные выражения (Prepared statemens)

Подготовленные выражения, это концепция, которую поддерживают современные БД. Он заключается в том, что заранее подготавливается шаблон SQL запроса, который при запуске настраивается с помощью параметров. Преимущества подготовленного запроса:

  • Не нужно подготавливать запрос каждый раз. Вырастает производительность системы.
  • Запрос не нужно экранировать кавычками, драйвер БД может делает это автоматически — что значительно снижает риск получить SQL инъекцию.

Рассмотрим как подготовить запрос и с помощью него добавлять информацию в таблицу. Для примере будем использовать таблицу b1 базы данных buratino.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
$stmt = $db->prepare("INSERT INTO b1 (name, img, cost) VALUES (:name, :img, :cost)");
$stmt->bindParam(':name', $name);
$stmt->bindParam(':img', $img);
$stmt->bindParam(':cost', $cost);
// вставим одну строку
$name = 'lion';
$img = 'https://cdn0.iconfinder.com/data/icons/joker-circus-by-joker2011-d3g8h6s/128/lion.png';
$cost= 90;
$stmt->execute();
 
// теперь другую строку с другими значениями
$name = 'cat';
$img = 'https://cdn4.iconfinder.com/data/icons/small-n-flat/24/cat-128.png';
$cost = 25;
$stmt->execute();

Выполните

Задание 1. Выполните примеры приведенные выше. Убедитесь, что данные добавлены в базу данных.

Используем подготовленные запросы для выборки из БД

Допустим нам необходимо выбрать данные по определенному ключу, который передается с другого скрипта методом GET.

1
2
3
4
5
6
$stmt = $db->prepare("SELECT * FROM b1 where name = ?");
if ($stmt->execute(array($_GET['name']))) {
  while ($row = $stmt->fetch()) {
    print_r($row);
  }
}

Выполнить

Задание 2. Создайте скрипт HS.php который создаст подготовленный запрос для добавления информации в базу данных buratino. В качестве источника данных используйте файл inp.php.

Задание 3. Создайте скрипт HS.php который создаст подготовленный запрос для добавления информации в базу данных buratino. В качестве источника данных используйте файл inp.php.

Дополнительная информация

Что почитать по теме:

Добавить комментарий

Ваш e-mail не будет опубликован. Обязательные поля помечены *