Последние учебники веб-разработки
×

PHP Руководство

PHP ГЛАВНАЯ PHP вступление PHP устанавливать PHP Синтаксис PHP переменные PHP Echo / Версия для печати PHP Типы данных PHP Строки PHP Константы PHP операторы PHP If...Else...Elseif PHP Switch PHP В то время как Loops PHP Для Loops PHP функции PHP Массивы PHP Сортировка массивов PHP Суперглобальные

PHP обращение

PHP форма обращение PHP форма Проверка PHP форма необходимые PHP форма URL/E-mail PHP форма полный

PHP продвинутый

PHP Массивы Мульти PHP Дата и время PHP Включают PHP файл обращение PHP файл Открыть / Read PHP файл Создание / запись PHP файл Загрузить PHP Cookies PHP Sessions PHP фильтры PHP Filters продвинутый PHP Ошибка обращение PHP исключение

MySQL Database

MySQL База данных MySQL соединение MySQL Create DB MySQL Create Таблица MySQL Insert Data MySQL Получить Последняя ID MySQL Вставка нескольких MySQL Prepared MySQL Select Data MySQL Delete Data MySQL Update Data MySQL Limit Data

PHP - XML

PHP XML Парсеры PHP SimpleXML Parser PHP SimpleXML - Get PHP XML Expat PHP XML DOM

PHP - AJAX

AJAX вступление AJAX PHP AJAX База данных AJAX XML AJAX Live Search AJAX RSS Reader AJAX Голосование

PHP Examples

PHP Примеры PHP викторина PHP сертификат

PHP Справка

PHP массив PHP Календарь PHP Дата PHP каталог PHP Ошибка PHP Файловая система PHP Фильтр PHP FTP PHP HTTP PHP Libxml PHP почта PHP математический PHP Разное PHP MySQLi PHP SimpleXML PHP строка PHP XML PHP Zip PHP Часовые пояса

 

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


Подготовленные заявления очень полезны против инъекций SQL.


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

Готовое заявление функция используется для выполнения тех же (or similar) операторов SQL несколько раз с высокой эффективностью.

Подготовленные заявления в основном работают так:

  1. Подготовка: шаблон выписки SQL создается и отправляется в базу данных. Некоторые значения остаются неопределенными, называются параметрами (labeled "?") . Пример: INSERT INTO MyGuests VALUES(?, ?, ?)
  2. База данных разбирает, компилирует и выполняет оптимизацию запросов на шаблоне оператора SQL, и сохраняет результат без его выполнения
  3. Выполнение: В более позднее время, приложение связывает значение параметров, а база данных выполняет оператор. Приложение может выполнить инструкцию столько раз, сколько он хочет с различными значениями

По сравнению с выполнением SQL заявления непосредственно, подготовленные заявления имеют два основных преимущества:

  • Подготовленные заявления сокращает время синтаксического анализа , поскольку препарат на запрос делается только один раз (although the statement is executed multiple times)
  • Связанные параметры ограничения пропускной способности канала к серверу, как вам нужно отправить только параметры каждый раз, а не весь запрос
  • Подготовленные заявления очень полезны против инъекций SQL, так как значения параметров, которые передаются позже с помощью другого протокола, не должны быть правильно убежали. Если исходный шаблон выписки не является производным от внешнего источника, инъекции SQL не может произойти.

Подготовленные заявления в MySQLi

Следующий пример использует подготовленные операторы и связанные параметры в MySQLi:

Пример (MySQLi with Prepared Statements)

<?php
$servername = "localhost";
$username = "username";
$password = "password";
$dbname = "myDB";

// Create connection
$conn = new mysqli($servername, $username, $password, $dbname);

// Check connection
if ($conn->connect_error) {
    die("Connection failed: " . $conn->connect_error);
}

// prepare and bind
$stmt = $conn->prepare("INSERT INTO MyGuests (firstname, lastname, email) VALUES (?, ?, ?)");
$stmt->bind_param("sss", $firstname, $lastname, $email);

// set parameters and execute
$firstname = "John";
$lastname = "Doe";
$email = "[email protected]";
$stmt->execute();

$firstname = "Mary";
$lastname = "Moe";
$email = "[email protected]";
$stmt->execute();

$firstname = "Julie";
$lastname = "Dooley";
$email = "[email protected]";
$stmt->execute();

echo "New records created successfully";

$stmt->close();
$conn->close();
?>

Код строки объяснить из приведенного выше примера:

"INSERT INTO MyGuests (firstname, lastname, email) VALUES (?, ?, ?)"

В нашем SQL, мы вставляем знак вопроса (?) , Где мы хотим подставить в целое число, строка, двойной или больших двоичных объектов значение.

Затем, посмотрите на bind_param() функции:

$stmt->bind_param("sss", $firstname, $lastname, $email);

Эта функция связывает параметры для запроса SQL и сообщает базу данных, что параметры являются. "sss" аргумент содержит типы данных , что параметры. S символ говорит MySQL, что параметр является строкой.

Аргумент может быть один из четырех типов:

  • я - целое число,
  • д - двойной
  • s - строка
  • б - BLOB

Мы должны иметь один из них для каждого параметра.

Говоря MySQL, какой тип данных ожидать, мы сводим к минимуму риск инъекции SQL.

Примечание: Если мы хотим , чтобы вставить какие - либо данные из внешних источников (like user input) , (like user input) , это очень важно, чтобы данные продезинфицировать и проверены.


Подготовленные заявления в PDO

Следующий пример использует подготовленные операторы и связанные параметры в PDO:

Пример (PDO with Prepared Statements)

<?php
$servername = "localhost";
$username = "username";
$password = "password";
$dbname = "myDBPDO";

try {
    $conn = new PDO("mysql:host=$servername;dbname=$dbname", $username, $password);
    // set the PDO error mode to exception
    $conn->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);

    // prepare sql and bind parameters
    $stmt = $conn->prepare("INSERT INTO MyGuests (firstname, lastname, email)
    VALUES (:firstname, :lastname, :email)");
    $stmt->bindParam(':firstname', $firstname);
    $stmt->bindParam(':lastname', $lastname);
    $stmt->bindParam(':email', $email);

    // insert a row
    $firstname = "John";
    $lastname = "Doe";
    $email = "[email protected]";
    $stmt->execute();

    // insert another row
    $firstname = "Mary";
    $lastname = "Moe";
    $email = "[email protected]";
    $stmt->execute();

    // insert another row
    $firstname = "Julie";
    $lastname = "Dooley";
    $email = "[email protected]";
    $stmt->execute();

    echo "New records created successfully";
    }
catch(PDOException $e)
    {
    echo "Error: " . $e->getMessage();
    }
$conn = null;
?>