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 - کلمه کلیدی Let (Let)

JavaScript – کلمه کلیدی Let (Let)

تعریف let کلیدواژه let در ES6 (2015) معرفی شد و دارای ویژگی‌های خاصی است که آن را از var...

بیشتر بخوانید
JavaScript - متغیرها (Variables)

JavaScript – متغیرها (Variables)

متغیرها در جاوا اسکریپت متغیرها در جاوا اسکریپت به عنوان ظرف‌هایی برای ذخیره‌سازی داده‌ها استفاده می‌شوند و می‌توانند به...

بیشتر بخوانید
JavaScript - کامنت‌ها (Comments)

JavaScript – کامنت‌ها (Comments)

کامنت‌ها در جاوا اسکریپت کامنت‌ها در جاوا اسکریپت به برنامه‌نویسان این امکان را می‌دهند تا توضیحاتی را به کد...

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

نظرات

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

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