PHP 5 about PHP 5 старт PHP 5 установка PHP 5 синтаксис PHP 5 змінні PHP 5 echo і print PHP 5 типи даних PHP 5 strings PHP 5 константи PHP 5 оператори PHP 5 if...else...elseif PHP 5 switch PHP 5 цикл while PHP 5 for і foreach PHP 5 функції PHP 5 масиви PHP 5 сортування масивів PHP 5 superglobals PHP 5 форми input PHP 5 форми обробка PHP 5 форми - обов'язкові поля PHP 5 форми - перевірка електронної пошти і URL РНР 5 форми заповнення PHP 5 багатовимірні масиви PHP 5 час і дата PHP 5 include PHP 5 файли обробка PHP 5 файли Open/Read/Close PHP 5 файли створення / запис PHP 5 файли завантаження PHP MySQL бази даних PHP MySQL Підключення PHP MySQL Створення бази даних PHP MySQL Створення таблиці PHP MySQL вставка даних PHP MySQL Отримання ідентифікатора останнього доданого запису PHP MySQL вставка кількох записів PHP MySQL Підготовлені вирази PHP MySQL відображення даних з таблиці PHP MySQL Видалення даних PHP MySQL оновлення даних PHP MySQL обмежити вибірку даних PHP регулярні вирази 1 PHP регулярні вирази 2 PHP регулярні вирази 3 PHP регулярні вирази 4 PHP ООП PHP ООП class PHP ООП модифікатори доступу PHP ООП extends PHP ООП статичні методи і властивості, константи PHP ООП abstract PHP ООП interface PHP альтернативний синтаксис керуючих конструкцій

PHP MySQL Підготовлені вирази


Підготовлені заяви дуже корисні проти ін'єкцій SQL.


Підготовлені вирази і параметри

Готові вирази у функціях використовуються для виконання тих же (або аналогічних) операторів SQL кілька разів з високою ефективністю.

Підготовлені вирази в основному працюють так:

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

У порівнянні з виконанням SQL виразу безпосередньо, підготовлені вирази мають три основні переваги:

  • Підготовлені вирази зменшують час розбору підготовки за запитом, виконуються тільки один раз (хоча оператор виконується кілька разів)
  • Пов'язані параметри обмеження пропускної здатності каналу до сервера, як вам потрібно відправити тільки параметри кожного разу, а не весь запит
  • Підготовлені заяви дуже корисні проти ін'єкцій SQL, так як значення параметрів, які передаються пізніше за допомогою іншого протоколу, не повинні бути правильно задані. Якщо вихідний шаблон запису не є похідним від зовнішнього джерела, ін'єкції SQL не може відбутися.

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

Наступний приклад використовує підготовлені оператори та пов'язані параметри в MySQLi:

Приклад (MySQLi з підготовленими операторами)

<?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 = "john@example.com";
$stmt->execute();

$firstname = "Mary";
$lastname = "Moe";
$email = "mary@example.com";
$stmt->execute();

$firstname = "Julie";
$lastname = "Dooley";
$email = "julie@example.com";
$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, що параметр є рядком.

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

  • i - ціле число,
  • d - подвійний
  • s - рядок
  • b - BLOB

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

Говорячи MySQL, який тип даних очікувати, ми зводимо до мінімуму ризик ін'єкції SQL.

Примітка: Якщо ми хочемо, щоб вставити якісь дані із зовнішніх джерел (наприклад , для користувача введення), це дуже важливо, щоб дані продезінфікувати і перевірити.


Підготовлені вирази в PDO

Наступний приклад використовує підготовлені оператори та пов'язані параметри в PDO:

Приклад (PDO з Підготовленими виразами)

<?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 = "john@example.com";
    $stmt->execute();

    // insert another row
    $firstname = "Mary";
    $lastname = "Moe";
    $email = "mary@example.com";
    $stmt->execute();

    // insert another row
    $firstname = "Julie";
    $lastname = "Dooley";
    $email = "julie@example.com";
    $stmt->execute();

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

Наш партнер:
beta test mp3 playlist downloader