PDO در PHP: اتصال امن و کارآمد به پایگاه داده

اطلاعات موضوع

درباره موضوع در تاریخ, در دسته زبان برنامه نویسی پی اچ پی ایجاد شده و آغاز کننده آن Aliمی باشد و موضوع آن: PDO در PHP: اتصال امن و کارآمد به پایگاه داده است. این موضوع تا کنون 2 بازدید کننده و, 0 پاسخ داشته و 0 بار پسندیده شده...
نام دسته زبان برنامه نویسی پی اچ پی
نام موضوع PDO در PHP: اتصال امن و کارآمد به پایگاه داده
آغاز کننده موضوع Ali
تاریخ شروع
پاسخ‌ها
0
بازدیدها
2
پسندها
0
آخرین ارسال توسط Ali

Ali

مسئول نظارت بر محتوا
پرسنل مدیریت
ناظم انجمن
Jun 7, 2020
955
1,265
PDO (PHP Data Objects) یک لایه انتزاعی دسترسی به پایگاه داده است که یک رابط یکپارچه برای اتصال به انواع مختلف پایگاه داده (مانند MySQL، PostgreSQL، SQLite و ...) در PHP فراهم می‌کند. استفاده از PDO به جای توابع قدیمی‌تر مانند mysql_* (که منسوخ شده‌اند) یا mysqli (که فقط برای MySQL است) مزایای زیادی دارد، از جمله امنیت بالاتر در برابر حملات SQL Injection و قابلیت حمل کد بین پایگاه‌های داده مختلف.

چرا PDO؟

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

۱. اتصال به پایگاه داده با PDO

برای اتصال به پایگاه داده، یک شیء از کلاس PDO ایجاد می‌کنیم. این کار معمولاً در یک بلوک try-catch انجام می‌شود تا خطاهای اتصال مدیریت شوند.

PHP:
محتوای بلوک کدها در دسترس شما نیست. برای مشاهده بلوک کدها، وارد انجمن شوید یاثبت نام کنید

توضیحات:

  • $dsn: رشته DSN (Data Source Name) که شامل نوع پایگاه داده (mysql)، هاست، نام پایگاه داده و کاراکتر ست است.
  • $options: آرایه‌ای از گزینه‌ها برای پیکربندی PDO.
* PDO::ATTR_ERRMODE: نحوه گزارش خطاها را تعیین می‌کند. PDO::ERRMODE_EXCEPTION باعث می‌شود PDO در صورت بروز خطا، یک استثنا (Exception) پرتاب کند که بهترین روش برای مدیریت خطا است.
* PDO::ATTR_DEFAULT_FETCH_MODE: حالت پیش‌فرض برای دریافت نتایج کوئری‌ها را مشخص می‌کند. PDO::FETCH_ASSOC نتایج را به صورت آرایه‌های انجمنی (کلید-مقدار) برمی‌گرداند.
* PDO::ATTR_EMULATE_PREPARES: این گزینه را حتماً false قرار دهید تا PDO از Prepared Statements واقعی استفاده کند و نه شبیه‌سازی شده، که امنیت را افزایش می‌دهد.

۲. اجرای کوئری‌های SELECT (دریافت اطلاعات)

برای دریافت اطلاعات، از متد prepare() برای آماده‌سازی کوئری و سپس execute() برای اجرای آن استفاده می‌کنیم.

PHP:
محتوای بلوک کدها در دسترس شما نیست. برای مشاهده بلوک کدها، وارد انجمن شوید یاثبت نام کنید

توضیحات:

  • prepare("SELECT ... WHERE id = :id"): کوئری را با یک placeholder نام‌گذاری شده (:id) آماده می‌کند. این روش امن‌ترین راه برای ارسال مقادیر به پایگاه داده است.
  • execute(['id' => 1]): مقادیر را به placeholders ارسال می‌کند. PDO به طور خودکار این مقادیر را escape می‌کند و از SQL Injection جلوگیری می‌کند.
  • fetch(): یک سطر از نتایج را برمی‌گرداند.
  • fetchAll(): تمام سطرهای نتایج را برمی‌گرداند.

۳. اجرای کوئری‌های INSERT، UPDATE، DELETE (تغییر اطلاعات)

برای عملیات تغییر اطلاعات نیز از Prepared Statements استفاده می‌کنیم.

INSERT:

PHP:
محتوای بلوک کدها در دسترس شما نیست. برای مشاهده بلوک کدها، وارد انجمن شوید یاثبت نام کنید

UPDATE:

PHP:
محتوای بلوک کدها در دسترس شما نیست. برای مشاهده بلوک کدها، وارد انجمن شوید یاثبت نام کنید

DELETE:

PHP:
محتوای بلوک کدها در دسترس شما نیست. برای مشاهده بلوک کدها، وارد انجمن شوید یاثبت نام کنید

توضیحات:

  • $pdo->lastInsertId(): پس از یک عملیات INSERT، آخرین ID درج شده را برمی‌گرداند.
  • $stmt->rowCount(): تعداد سطرهای تحت تأثیر یک عملیات UPDATE یا DELETE را برمی‌گرداند.

۴. تراکنش‌ها (Transactions)

برای اطمینان از اینکه مجموعه‌ای از عملیات پایگاه داده به صورت اتمیک (همه با هم موفق یا همه با هم ناموفق) انجام شوند، از تراکنش‌ها استفاده می‌کنیم.

PHP:
محتوای بلوک کدها در دسترس شما نیست. برای مشاهده بلوک کدها، وارد انجمن شوید یاثبت نام کنید

نتیجه‌گیری

PDO یک ابزار قدرتمند و ضروری برای هر توسعه‌دهنده PHP است که با پایگاه داده کار می‌کند. با استفاده از آن، می‌توانید کدی امن‌تر، قابل نگهداری‌تر و انعطاف‌پذیرتر بنویسید. همیشه از Prepared Statements برای جلوگیری از SQL Injection استفاده کنید و مدیریت خطا را جدی بگیرید.
 

عقب
بالا