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 جلوگیری کنید و بهینه‌سازی‌های زیادی در عملکرد پایگاه داده انجام دهید. با این روش، کوئری‌ها به صورت امن و سریع‌تری اجرا می‌شوند و مدیریت داده‌ها به مراتب ساده‌تر می‌شود.

پست های مرتبط

مطالعه این پست ها رو از دست ندین!
Python - محدود کردن داده (MongoDB Limit)

Python – محدود کردن داده (MongoDB Limit)

Python MongoDB محدود کردن نتایج برای محدود کردن نتایج در MongoDB، از متد limit() استفاده می‌کنیم. متد limit() یک...

بیشتر بخوانید
Python - بروزرسانی (MongoDB Update)

Python – بروزرسانی (MongoDB Update)

به‌روزرسانی یک رکورد برای به‌روزرسانی یک رکورد یا سند در MongoDB، از متد update_one() استفاده می‌کنیم. پارامتر اول متد...

بیشتر بخوانید
Python - حذف کالکشن (MongoDB Drop Collection)

Python – حذف کالکشن (MongoDB Drop Collection)

حذف کالکشن شما می‌توانید یک جدول یا کالکشن در MongoDB را با استفاده از متد drop() حذف کنید. مثالحذف...

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

نظرات

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

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