0Pricing
PHP Academy · Урок

Подготовленные выражения и привязка параметров

Используйте prepare, bindParam и execute, чтобы предотвращать SQL-инъекции

«Подготовленные выражения и привязка параметров» — бесплатный урок PHP Academy на CoddyKit. Это урок 2 из 4. Ты можешь прочитать весь урок бесплатно ниже — а потом практиковать его прямо в браузере с встроенным редактором кода и ИИ-репетитором 24/7. Это часть пути обучения PHP Academy, и твой прогресс синхронизируется между веб-версией и приложением CoddyKit. Курс PHP Academy содержит 4 уроков всего.

Зачем нужны подготовленные выражения

Подготовленные выражения отделяют структуру SQL от данных. Пользовательский ввод всегда обрабатывается как значение, а не как код SQL, что делает SQL-инъекцию невозможной.

prepare() + execute()

Основной порядок действий: подготовьте запрос с заполнителями, затем выполните его со значениями.

<?php
$stmt = $pdo->prepare("SELECT * FROM users WHERE email = ?");
$stmt->execute([$_POST["email"]]);
$user = $stmt->fetch();

Именованные заполнители

Используйте именованные заполнители (:name) для ясности, особенно если одно и то же значение встречается несколько раз.

<?php
$stmt = $pdo->prepare(
    "INSERT INTO users (name, email) VALUES (:name, :email)"
);
$stmt->execute([':name' => "Alice", ':email' => "alice@example.com"]);

bindParam и bindValue

bindParam связывает переменную по ссылке — значение считывается во время выполнения. bindValue немедленно связывает конкретное значение.

<?php
$name = "Bob";
$stmt = $pdo->prepare("INSERT INTO users (name) VALUES (:name)");
$stmt->bindParam(":name", $name);
$name = "Carol";
$stmt->execute(); // inserts "Carol"

Пример bindValue

Используйте bindValue, если хотите зафиксировать значение в момент связывания.

<?php
$stmt = $pdo->prepare("SELECT * FROM products WHERE price < :max");
$stmt->bindValue(":max", 50.00, PDO::PARAM_INT);
$stmt->execute();

Константы типов

Необязательный третий параметр задаёт тип данных: PDO::PARAM_INT, PDO::PARAM_STR, PDO::PARAM_BOOL, PDO::PARAM_NULL.

Повторное выполнение операторов

Подготовленный оператор можно выполнять несколько раз — запрос компилируется на сервере только один раз.

<?php
$stmt = $pdo->prepare("INSERT INTO logs (msg) VALUES (:msg)");
foreach ($messages as $msg) {
    $stmt->execute([':msg' => $msg]);
}

rowCount()

После INSERT/UPDATE/DELETE rowCount() возвращает количество затронутых строк.

<?php
$stmt = $pdo->prepare("DELETE FROM users WHERE active = 0");
$stmt->execute();
echo $stmt->rowCount()." users deleted";

lastInsertId()

После INSERT получите первичный ключ с автоинкрементом с помощью $pdo->lastInsertId().

<?php
$stmt = $pdo->prepare("INSERT INTO articles (title) VALUES (:t)");
$stmt->execute([':t' => "My Post"]);
$newId = $pdo->lastInsertId();

Никогда не объединяйте пользовательский ввод со строкой запроса

Никогда не делайте так: "SELECT * FROM users WHERE name = '".$name."'". Всегда используйте заполнители, даже если Вы «санитизировали» ввод.

Объект PDOStatement

prepare() возвращает объект PDOStatement с методами: execute(), fetch(), fetchAll(), bindParam(), bindValue(), rowCount().

Итоги

Всегда используйте подготовленные выражения для запросов с внешними данными. Предпочитайте именованные заполнители. Используйте bindValue для немедленных значений, а bindParam — для связывания в цикле.

Быстрая проверка

Когда bindParam считывает своё значение?

Часто задаваемые вопросы

Урок «Подготовленные выражения и привязка параметров» бесплатный?

Да — полный текст урока «Подготовленные выражения и привязка параметров» бесплатно доступен здесь в веб-версии. Чтобы практиковать его интерактивно (встроенный редактор кода и ИИ-репетитор 24/7) и разблокировать остальной курс PHP Academy, подпишись на CoddyKit PRO. Курс PHP Academy содержит 4 уроков всего.

Чему я научусь в уроке «Подготовленные выражения и привязка параметров»?

Используйте prepare, bindParam и execute, чтобы предотвращать SQL-инъекции Ты практикуешь PHP Academy с помощью реального кода, который запускаешь прямо в браузере, и ИИ-репетитор 24/7 отвечает на твои вопросы во время урока.

Нужен ли мне опыт, чтобы начать PHP Academy?

Предыдущий опыт не требуется. PHP Academy на CoddyKit структурирован для всех уровней — от новичков до продвинутых, поэтому ты можешь начать отсюда или с самого начала и учиться в своем темпе. Это урок 2 из 4.

Сколько времени занимает урок «Подготовленные выражения и привязка параметров»?

Большинство уроков CoddyKit занимают около 5–10 минут. Каждый из них компактный и интерактивный, поэтому ты постоянно делаешь прогресс и продолжаешь с того же места в веб-версии и приложении.

Можно ли писать и запускать код в этом уроке PHP Academy?

Да. Каждый урок PHP Academy включает встроенный редактор кода, поэтому ты пишешь и запускаешь реальный код прямо в браузере и получаешь моментальную обратную связь от AI — локальная установка не требуется.

Все уроки этого курса

  1. Подключение к MySQL с помощью PDO
  2. Подготовленные выражения и привязка параметров
  3. Получение результатов с помощью PDO
  4. Транзакции с PDO
← Назад к PHP Academy