PDO (PHP Data Objects) یک لایه انتزاعی دسترسی به پایگاه داده است که یک رابط یکپارچه برای اتصال به انواع مختلف پایگاه داده (مانند MySQL، PostgreSQL، SQLite و ...) در PHP فراهم میکند. استفاده از PDO به جای توابع قدیمیتر مانند
چرا PDO؟
۱. اتصال به پایگاه داده با PDO
برای اتصال به پایگاه داده، یک شیء از کلاس
توضیحات:
*
*
۲. اجرای کوئریهای SELECT (دریافت اطلاعات)
برای دریافت اطلاعات، از متد
توضیحات:
۳. اجرای کوئریهای INSERT، UPDATE، DELETE (تغییر اطلاعات)
برای عملیات تغییر اطلاعات نیز از Prepared Statements استفاده میکنیم.
INSERT:
UPDATE:
DELETE:
توضیحات:
۴. تراکنشها (Transactions)
برای اطمینان از اینکه مجموعهای از عملیات پایگاه داده به صورت اتمیک (همه با هم موفق یا همه با هم ناموفق) انجام شوند، از تراکنشها استفاده میکنیم.
نتیجهگیری
PDO یک ابزار قدرتمند و ضروری برای هر توسعهدهنده PHP است که با پایگاه داده کار میکند. با استفاده از آن، میتوانید کدی امنتر، قابل نگهداریتر و انعطافپذیرتر بنویسید. همیشه از Prepared Statements برای جلوگیری از SQL Injection استفاده کنید و مدیریت خطا را جدی بگیرید.
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 استفاده کنید و مدیریت خطا را جدی بگیرید.