PHP – استفاده از Prepared Statements در MySQL

Prepared Statements یا عبارات آماده یکی از تکنیک‌های کلیدی در PHP و MySQL برای جلوگیری از حملات SQL Injection و بهبود عملکرد اجرای کوئری‌های پایگاه داده هستند. در این روش، یک قالب کوئری آماده شده و پارامترهای آن بعداً با مقادیر واقعی پر می‌شوند.

مزایای Prepared Statements:

  • کاهش زمان تجزیه: آماده‌سازی یک کوئری تنها یک بار انجام می‌شود، حتی اگر کوئری چندین بار اجرا شود.
  • کاهش پهنای باند: تنها پارامترها به سرور ارسال می‌شوند، نه کل کوئری.
  • پیشگیری از SQL Injection: از آنجایی که مقادیر پارامترها از کوئری جدا هستند و در یک پروتکل مختلف ارسال می‌شوند، احتمال آسیب‌پذیری در برابر SQL Injection به حداقل می‌رسد.

استفاده از Prepared Statements در MySQLi

مثال (MySQLi با Prepared Statements)

در این مثال، از MySQLi برای درج چندین رکورد به جدول “MyGuests” با استفاده از Prepared Statements استفاده می‌کنیم:

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

// ایجاد اتصال
$conn = new mysqli($servername, $username, $password, $dbname);

// بررسی اتصال
if ($conn->connect_error) {
  die("اتصال ناموفق: " . $conn->connect_error);
}

// آماده‌سازی و بایند کردن پارامترها
$stmt = $conn->prepare("INSERT INTO MyGuests (firstname, lastname, email) VALUES (?, ?, ?)");
$stmt->bind_param("sss", $firstname, $lastname, $email);

// تنظیم پارامترها و اجرا
$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 "رکوردهای جدید با موفقیت ایجاد شدند";

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

توضیحات کد:

  • prepare(): کوئری SQL را آماده می‌کند.
  • bind_param(): پارامترها را به کوئری متصل می‌کند و نوع داده‌ها را مشخص می‌کند.
    • i برای اعداد صحیح (integer)
    • d برای اعداد اعشاری (double)
    • s برای رشته‌ها (string)
    • b برای BLOBs

استفاده از Prepared Statements در PDO

مثال (PDO با Prepared Statements)

در این مثال، از PDO برای درج چندین رکورد به جدول “MyGuests” با استفاده از Prepared Statements استفاده می‌کنیم:

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

try {
  // ایجاد اتصال
  $conn = new PDO("mysql:host=$servername;dbname=$dbname", $username, $password);
  // تنظیم حالت خطا به استثنا
  $conn->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);

  // آماده‌سازی SQL و بایند کردن پارامترها
  $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);

  // درج رکوردها
  $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 "رکوردهای جدید با موفقیت ایجاد شدند";
} catch(PDOException $e) {
  echo "خطا: " . $e->getMessage();
}
$conn = null;
?>

توضیحات کد:

  • prepare(): کوئری SQL را آماده می‌کند.
  • bindParam(): پارامترها را به کوئری متصل می‌کند و نام‌های پارامترها را مشخص می‌کند.
  • execute(): کوئری را با مقادیر پارامترها اجرا می‌کند.

جمع‌بندی

استفاده از Prepared Statements در PHP به کمک MySQLi یا PDO به شما این امکان را می‌دهد که از حملات SQL Injection جلوگیری کنید و بهینه‌سازی‌های زیادی در عملکرد پایگاه داده انجام دهید. با این روش، کوئری‌ها به صورت امن و سریع‌تری اجرا می‌شوند و مدیریت داده‌ها به مراتب ساده‌تر می‌شود.

پست های مرتبط

مطالعه این پست ها رو از دست ندین!
JavaScript - رویدادها (Events)

JavaScript – رویدادها (Events)

رویدادهای HTML رویدادها در HTML، “اتفاقاتی” هستند که برای عناصر HTML رخ می‌دهند. این اتفاقات می‌توانند ناشی از کار...

بیشتر بخوانید
JavaScript - سازنده‌های شیء (Object Constructors)

JavaScript – سازنده‌های شیء (Object Constructors)

ساخت آبجکت با تابع سازنده (Object Constructor Function) برای ساخت چندین آبجکت مشابه، از تابع سازنده استفاده می‌شود. این...

بیشتر بخوانید
JavaScript - نمایش شیء (Object Display)

JavaScript – نمایش شیء (Object Display)

نحوه نمایش آبجکت‌ها در جاوااسکریپت هنگام نمایش یک آبجکت جاوااسکریپت به صورت مستقیم، خروجی معمولاً به شکل [object Object]...

بیشتر بخوانید

نظرات

سوالات و نظراتتون رو با ما به اشتراک بذارید

برای ارسال نظر لطفا ابتدا وارد حساب کاربری خود شوید.