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 - تاریخ‌ها (Dates)

JavaScript – تاریخ‌ها (Dates)

آبجکت‌های تاریخ (Date) در جاوااسکریپت آبجکت‌های تاریخ در جاوااسکریپت به ما امکان کار با تاریخ و زمان را می‌دهند....

بیشتر بخوانید
JavaScript - آرایه‌های ثابت (Array Const)

JavaScript – آرایه‌های ثابت (Array Const)

جاوااسکریپت: تعریف آرایه با const در سال 2015، جاوااسکریپت کلمه کلیدی مهمی به نام const را معرفی کرد. این...

بیشتر بخوانید
JavaScript - تکرار آرایه‌ها (Array Iteration)

JavaScript – تکرار آرایه‌ها (Array Iteration)

جاوا اسکریپت: تکرار بر روی آرایه‌ها جاوا اسکریپت روش‌های مختلفی برای تکرار (Iteration) بر روی آرایه‌ها ارائه می‌دهد که...

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

نظرات

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

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