آموزش PDO - معرفی و آشنایی اولیه

01 بهمن 1397
درسنامه درس 1 از سری آموزش PDO
PDO-introduction

با سلام، چندی پیش دوره ی رایگان برنامه نویسی شیء گرای PHP به اتمام رسید و بر اساس قولی که به شما داده بودیم با سری آموزش PDO (مخفف PHP Data Object - به معنی شیء داده ی PHP) به صورت کامل در خدمت شما هستیم. قبل از شروع ذکر این نکته الزامی است:

این دوره برای افراد مبتدی در نظر گرفته نشده است. برای استفاده ی واقعی از مطالب این دوره علاوه بر آشنایی قبلی با مباحث پایگاه داده (مانند MySQL) باید آشنایی کلی با مباحث برنامه نویسی شیء گرای PHP نیز داشته باشید.

چرا از mysql یا mysqli استفاده نکنیم؟

سوالی که اکثر توسعه دهندگان هنگام برخورد با تکنولوژی های جدید میپرسند این است که "چرا باید از فلان تکنولوژی استفاده کنم؟" یا "چرا سختی یادگیری فلان تکنولوژی را تحمل کنم و روش خودم را تغییر دهم؟" این سوالات نه تنها سوالات بدی نیستند بلکه سوالات بسیار خوبی محسوب می شوند. پرسش گری هنگام مواجهه با هر موردی در برنامه نویسی از بهترین عادات برنامه نویسان خوب است. من سعی می کنم با ذکر چند مورد به این سوالات جواب بدهم:

رابط PDO شیء گرا است

همه ی ما می دانیم که در سال های اخیر PHP با سرعت قابل توجهی در حال پیشرفت و به روز رسانی بوده است. معمولا هنگامی که چنین اتفاقی در یک زبان برنامه نویسی می افتد، محدودیت های آن زبان برنامه نویسی افزایش پیدا می کند تا علاوه بر امنیت، به توسعه دهندگان کمک کند تا بتوانند برنامه های سطح بالا و حرفه ای بنویسند.

زمانی که بحث به PHP می رسد، می گوییم PHP بهتر یعنی PHP شیء گرا.

یعنی هر چه بیشتر از اشیاء استفاده کنید، کد های مرتب تر و با قابلیت تست آسان تر دارید. اولین قدم برای برنامه نویسی شیء گرا در سمت پایگاه داده استفاده از رابط PDO است.

انتزاعی بودن PDO

انتزاعی بودن یا استفاده ی PDO از یک لایه ی انتزاعی در تصویر زیر به خوبی دیده می شود:

لایه ی انتزاعی رابط PDO

اگر به تصویر توجه کنید متوجه می شوید که PDO از یک لایه ی انتزاعی برای دسترسی به پایگاه های داده استفاده می کند. چرا می گوییم انتزاعی؟ به این دلیل که این لایه برای ما قابل مشاهده نیست. به عبارت دیگر PDO می تواند با پایگاه های داده ی بسیاری ارتباط برقرار کند اما mysqli نمی تواند چنین کاری کند و فقط مخصوص MySQL است. احتمالا این دو جمله را برای کار با PDO دیده اید:

  • PDO provides a data-access abstraction layer
  • PDO does not provide a database abstraction

وقتی می گوییم PDO یک لایه ی دسترسی به داده ی انتزاعی (data-access abstraction layer) دارد، یعنی لایه ای که مسئول ارتباط با پایگاه های داده است، انتزاعی است و مخصوص یک نوع پایگاه داده ی خاص نیست. این بدان معنی است که PDO از شما پارامتر هایی ثابت را می گیرد (مثلا نام پایگاه داده، آدرس سرور و ...) و با همین پارامتر ها و یک دستور واحد می تواند به پایگاه های داده ی بسیاری متصل شود.

از طرفی زمانی که می گوییم PDO پایگاه داده را انتزاعی نمی داند (database abstraction) یعنی با اینکه می تواند با یک دستور به پایگاه های داده ی مختلف متصل شود و از لحاظ اتصال به پایگاه داده انتزاعی است، اما برای کار با پایگاه داده (مثلا نوشتن query ها یا SQL statement ها) هیچ لایه ی انتزاعی ندارد. بنابراین باید query های مخصوص هر پایگاه داده را با زبان خودش بنویسید.

فرض کنید کارفرما از شما پروژه ای خواسته است و شما این پروژه را با MySQL و به بهترین شکل و فرم نوشته اید. حالا چند وقت گذشته است و کارفرما به شما می گوید به هر دلیلی مدیران شرکت تصمیم گرفته اند که پروژه باید با PostgreSQL پیاده سازی شود. در چنین حالتی می خواهید چه کار کنید؟

بهترین کاری که می توانید انجام دهید جایگذاری های پی در پی و شلخته و شلوغ است، مانند تبدیل mysqli_connect به pg_connect. همچنین باید تمامی توابعی را که برای اجرای query ها و دریافت داده نوشته اید را تصحیح یا بازنویسی کنید و این داستان حالا حالا ها تمام شدنی نبود اما اگر از PDO استفاده کرده بودید کافی بود چند پارامتر را در فایل configuration تغییر دهید!

نکته: شما هنوز هم مجبور خواهید بود که query های MySQL را به query های PostgreSQL تبدیل کنید. در بعضی از وب سایت ها به اشتباه نوشته شده است که اگر از PDO استفاده کنید همه چیز خود به خود و به طور جادویی کار می کند! خیر، مزیت استفاده از PDO این است که به جز بازنویسی query ها نیازی به تغییر زیادی در سورس کد خود نخواهید داشت.

قابلیت استفاده از parameter binding

قابلیت parameter binding (به معنی متصل کردن پارامتر ها) به شما اجازه می دهد تا به جای placeholder ها در query خود، مقادیر متغیر ها را قرار دهید. اگر بخواهم به زبان ساده تر بگویم، می گویم به جای نوشتن query کامل در سورس کد، می توانید قسمت هایی از آن را با placeholder (به معنی جا گیرنده) ها پر کنید.

در واقع placeholder ها همانطور که از نامشان مشخص است جای متغیری را نگه می دارند تا بعدا متغیر آن جا بنشیند و خودشان مقدار خاصی ندارند. به طور مثال همه ی ما با سوالات جا خالی در مدرسه آشنا هستیم. آن چند نقطه ای که به عنوان جا خالی می گذاشتند نوعی placeholder برای جواب ما بود.

دو دلیل عمده برای استفاده از پارامتر های متصل (bind parameters) وجود دارد:

  • امنیت: bind parameter ها بهترین راه برای جلوگیری از SQL injection هستند.
  • کارایی و بهره وری: پایگاه های داده ای که برای اجرا از کش پشتیبانی می کنند، می توانند از کش قبلی برای اجرای چندباره ی یک statement استفاده کنند که باعث سرعت بخشیدن به کار می شود.

قابلیت fetch کردن داده ها در اشیاء

اگر از ORM هایی مثل Doctrine استفاده کرده باشید می دانید قابلیت ارائه ی داده در جدول ها به صورت یک شیء چقدر اهمیت دارد. اگر دوست دارید از این قابلیت استفاده کنید اما دوست ندارید به سراغ یادگیری ORM بروید، استفاده از PDO این قابلیت را به شما می دهد.

رابط mysql دیگر پشتیبانی نمی شود!

رابط mysql از PHP7 حذف شده است! بنابراین اگر بخواهید از PHP7 استفاده کنید (که حتما پیشنهاد می کنم چنین کاری را انجام دهید) باید تمامی دستورات mysql را به mysqli تغییر دهید. بنابراین حالا که قرار است از mysql مهاجرت کنید چرا مستقیما به PDO مهاجرت نکنید؟ اگر قرار باشد در کشور دیگری زندگی کنید و قصد دارید از خانه ی خود دور شوید، چرا کشور ثروتمند و مرفه ای را انتخاب نکنید و به سیبری بروی!؟

همچنین بر اساس روند پیشرفت زبان PHP احتمال اینکه mysqli هم از بین برود غیر ممکن نیست و حتی اگر این اتفاق نیوفتند، مطمئن باشید که در آینده اکثر کارفرمایان از شما درخواست استفاده از رابط های شیء گرا را خواهند داشت.

امیدوارم این دلایل مختصر و کوتاه شما را متقاعد کرده باشد که از PDO استفاده کنید. البته یادتان نرود که این مزایا مخصوص رابط PDO بود و تمام مزایای کلی برنامه نویسی شیء گرا (مانند کیفیت بالای کد، تمیز بودن کد، نظم بالا، کاهش حجم کد و زحمت برنامه نویس، مدیریت آسان تر کد، تست بهتر کد و ...) نیز بر آن اطلاق می شود.

شروع کار با PHP و PDO (آموزش PDO)

برای کار با PHP به طور کلی به یک وب سرور نیاز است. مشکل اینجاست که ما تنها قصد تمرین داشته و پرداخت هزینه ی یک وب سرور برای تمرین عاقلانه نیست. پیشنهاد من به شما استفاده از نرم افزار های رایگانی مانند WAMP است. این نرم افزار ها محیط یک وب سرور را روی ویندوز شما شبیه سازی می کنند و به نوعی یک سرور محلی را روی سیستم خود خواهید داشت.

خلاصه ی مقاله

این قسمت اول از سری آموزشی اتصال شیء گرا به پایگاه داده است. در این قسمت سعی کرده ایم به دلایل مهاجرت به رابط PDO بپردازیم و آن ها را به شکل فنی توضیح دهیم. در قسمت های آینده به سراغ مباحث عملی و کدنویسی PDO خواهیم رفت.

تمام فصل‌های سری ترتیبی که روکسو برای مطالعه‌ی دروس سری آموزش PDO توصیه می‌کند:
نویسنده شوید
دیدگاه‌های شما (3 دیدگاه)

در این قسمت، به پرسش‌های تخصصی شما درباره‌ی محتوای مقاله پاسخ داده نمی‌شود. سوالات خود را اینجا بپرسید.

Alireza
16 تیر 1401
درج یک بود توضیحات

در این قسمت، به پرسش‌های تخصصی شما درباره‌ی محتوای مقاله پاسخ داده نمی‌شود. سوالات خود را اینجا بپرسید.

روکسو
11 مرداد 1401
خودتون درجه یک هستید.

در این قسمت، به پرسش‌های تخصصی شما درباره‌ی محتوای مقاله پاسخ داده نمی‌شود. سوالات خود را اینجا بپرسید.

zohreh
02 آبان 1399
من تمام جلسات این آموزش pdo  رو مطالعه کردم، بسیار عالی ممنون از شما بابت محتوای خوبتون

در این قسمت، به پرسش‌های تخصصی شما درباره‌ی محتوای مقاله پاسخ داده نمی‌شود. سوالات خود را اینجا بپرسید.

Mos
02 بهمن 1397
سلام جلسات بعدی کی اضافه می شود؟؟

در این قسمت، به پرسش‌های تخصصی شما درباره‌ی محتوای مقاله پاسخ داده نمی‌شود. سوالات خود را اینجا بپرسید.

امیر زوارمی
03 بهمن 1397
سلام به شما، جلسات آینده در حال تدوین هستند و کم کم به سایت اضافه میشن. اگر تاخیری در انتشار جلسات پیش اومده عذر خواهی می کنم. دلیلش این بوده که تدوین مطالب PDO زمان بر هست. چون از طرفی مطالب حساس هست و از طرف دیگه باید با چندین مرجع معتبر چک بشه. در ضمن، مطالب این دوره علاوه بر اینکه با مراجع معتبر چک میشه با مطالب و نظرات آقای Bill Karwin هم چک میشه. ایشون از توسعه دهندگان پایگاه داده هستند که سال هاست از PDO استفاده می کنند و Badge طلایی برای پاسخگویی به سوالات مربوط به PDO در stackoverflow.com دارند. صفحه ی ایشون: https://stackoverflow.com/users/20860/bill-karwin

در این قسمت، به پرسش‌های تخصصی شما درباره‌ی محتوای مقاله پاسخ داده نمی‌شود. سوالات خود را اینجا بپرسید.