PHP MySQL tayyorlangan buyruqlar


ULASHISH

PHP MySQL tomonidan tayyorlangan operatorlar

PHP MySQL tomonidan tayyorlangan operatorlar asosan SQL in’ektsion hujumlarini oldini olish va unumdorlikni yaxshilash uchun ishlatiladi.

Tayyorlangan operatorlar ma’lumotlarni SQL buyruqlaridan ajratib turadi.

Tayyorlangan operatorlar asosan shunday ishlaydi:

  1. Tayyorlang: SQL so‘rovi shabloni to‘ldirgichlar bilan serverga yuboriladi. Ma’lumotlar qiymatlari yuborilmaydi. Misol: INSERT INTO MyGuests VALUES(?, ?, ?). Keyin server SQL so‘rovi shablonini bajarmasdan tahlil qiladi, kompilyatsiya qiladi va optimallashtiradi.
  2. Bajarish: Keyinchalik dastur qiymatlarni parametrlarga bog‘laydi va ma’lumotlar bazasi so‘rovni bajaradi. Ilova so‘rovni turli qiymatlar bilan xohlagancha bajarishi mumkin

Tayyorlangan operatorlar to‘rtta asosiy afzalliklarga ega:

  • Kisqartirilgan tahlil vaqti - so‘rov bo‘yicha tayyorgarlik faqat bir marta bajarilganligi sababli (operator bir necha marta bajarilgan bo‘lsa ham)
  • O‘tkazish qobiliyatini minimallashtirish - Bog‘langan parametrlar serverga o‘tkazish qobiliyatini minimallashtiradi, chunki har safar butun so‘rovni emas, balki faqat parametrlarni yuborishingiz kerak.
  • xavfsizlik - Tayyorlangan operatorlar SQL in’ektsiyalariga juda foydali, chunki dasturiy ta’minot boshqa qo‘shimcha uzatiladigan parametrlardan to‘g‘ri xavfsizlik kerak emas. Agar dastlabki operator shablonlari tashkilot ma’lumotlardan olinmagan bo‘lsa, SQL in’ektsiyasi amalga oshirilmaydi
  • Toza kod - SQL buyruqlaridan ma’lumotlarni ajratish orqali

MySQLi-da tayyorlangan operatorlar

Quyidagi misol MySQLi-da tayyorlangan operatorlardan foydalanadi:

Misol - Tayyor operatorlar bilan 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); } // SQL query template $sql = "INSERT INTO MyGuests (firstname, lastname, email) VALUES (?, ?, ?)"; // Prepare the SQL query template if($stmt = $conn->prepare($sql)) {   // Bind parameters   $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"; } else {   echo "Error: " . $sql . "<br>" . $conn->error; } $stmt->close(); $conn->close(); ?>

Kod tushuntirish

SQL-da savol belgilari (?) ism, familiya va elektron pochta qiymatlari uchun joy egalari:

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

Endi bind_param() funksiyasiga qarang. Bu funksiya o‘zgaruvchilarni SQL so‘rovidagi joy egalariga bog‘laydi. Joy egalari (?) bajarilish vaqtida o‘zgaruvchilarda saqlangan haqiqiy qiymatlar bilan almashtiriladi. "sss" argumenti har bir parametrning ma’lumot turini ko‘rsatadi. s belgisi MySQL’ga parametrning string ekanligini bildiradi. Bunday belgini HAR BIR parametr uchun ko‘rsatishimiz kerak. MySQL’ga qanday turdagi ma’lumot kutish kerakligini aytib, biz SQL injection xavfini kamaytiramiz:

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

Tur argumenti to‘rt turdan biri bo‘lishi mumkin:

  • i - integer (whole number)
  • d - double (floating point number)
  • s - string (text)
  • b - binary (image, PDF, etc.)
Eslatma: Agar biz tashqi manbalardan ma’lumotlarni kiritmoqchi bo‘lsak (foydalanuvchi kiritishi kabi), ma’lumotlarning tozalanganligi va tasdiqlanganligi juda muhim.


PDO da tayyorlangan operatorlar

Quyidagi misol PDO da tayyorlangan operatorlardan foydalanadi:

Misol - Tayyor operatorlar bilan PDO (savol belgisi argumentlari)

<?php $servername = "localhost"; $username = "username"; $password = "password"; $dbname = "myDB"; 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); } catch(PDOException $e){   die("Could not connect. " . $e->getMessage()); } try {   $sql = "INSERT INTO MyGuests (firstname, lastname, email) VALUES (?, ?, ?)";   // Prepare the SQL query template   $stmt = $conn->prepare($sql);   // Execute with values   $stmt->execute(['John', 'Doe', 'john@example.com']);   $stmt->execute(['Mary', 'Moe', 'mary@example.com']);   $stmt->execute(['Julie', 'Dooley', 'julie@example.com']);   echo "New records created successfully"; } catch(PDOException $e) {   echo "Error: " . $e->getMessage(); } $stmt = null; $conn = null; ?>

Misol - Tayyor operatorlar bilan PDO (Nomlangan argumentlar)

<?php $servername = "localhost"; $username = "username"; $password = "password"; $dbname = "myDB"; 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); } catch(PDOException $e){   die("Could not connect. " . $e->getMessage()); } try {   $sql = "INSERT INTO MyGuests (firstname, lastname, email) VALUES (:firstname, :lastname, :email)";   // Prepare the SQL query template   $stmt = $conn->prepare($sql);   // Bind parameters   $stmt->bindParam(':firstname', $firstname, PDO::PARAM_STR);   $stmt->bindParam(':lastname', $lastname, PDO::PARAM_STR);   $stmt->bindParam(':email', $email, PDO::PARAM_STR);   // Execute with values   $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"; } catch(PDOException $e) {   echo "Error: " . $e->getMessage(); } $stmt = null; $conn = null; ?>


W3Schools Pathfinder

Yutuqlaringizni kuzating – bu bepul!