اتصال با PDO

اتصال به پایگاه داده با PDO در PHP

PDO یا PHP Data Objects یک لایه انتزاعی برای کار با پایگاه‌های داده در PHP است که روشی ایمن و یکپارچه برای ارتباط با انواع سیستم‌های مدیریت پایگاه داده ارائه می‌دهد. برخلاف روش‌های قدیمی‌تر مانند mysql_connect، PDO از ویژگی‌های مدرنی مانند prepared statements و transaction پشتیبانی می‌کند.

نکته: برای یادگیری روش‌های سنتی اتصال به MySQL می‌توانید اینجا را کلیک نمایید، اما توصیه می‌شود برای پروژه‌های جدید از PDO استفاده کنید.

مزایای استفاده از PDO

  • امنیت بالا با پشتیبانی از prepared statements
  • قابلیت کار با انواع پایگاه‌های داده (MySQL, PostgreSQL, SQLite و ...)
  • پشتیبانی از تراکنش‌ها (Transactions)
  • خطایابی پیشرفته با حالت‌های مختلف گزارش خطا
  • شیءگرایی کامل و روش کدنویسی مدرن
پارامتر توضیحات
DSN رشته اتصال به پایگاه داده شامل نوع دیتابیس، هاست و نام دیتابیس
Username نام کاربری پایگاه داده
Password رمز عبور پایگاه داده
Options تنظیمات اختیاری برای اتصال

نمونه کد اتصال با PDO

try {
  $pdo = new PDO('mysql:host=localhost;dbname=testdb', 'username', 'password');
  $pdo->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
  echo "اتصال موفقیت‌آمیز بود!";
} catch(PDOException $e) {
  echo "خطا در اتصال: " . $e->getMessage();
}

در کد فوق، ابتدا با استفاده از کلاس PDO یک شیء اتصال ایجاد می‌کنیم. پارامتر اول (DSN) شامل نوع پایگاه داده (mysql)، هاست (localhost) و نام دیتابیس (testdb) می‌باشد. سپس با استفاده از متد setAttribute، حالت گزارش خطا را به حالت استثنا (Exception) تنظیم می‌کنیم.


تنظیمات پیشرفته PDO

PDO امکان تنظیمات پیشرفته‌ای را فراهم می‌کند که می‌تواند عملکرد اتصال را بهبود بخشد:

  1. حالت خطایابی: PDO::ATTR_ERRMODE با مقادیر PDO::ERRMODE_SILENT، PDO::ERRMODE_WARNING و PDO::ERRMODE_EXCEPTION
  2. حالت بازیابی: PDO::ATTR_DEFAULT_FETCH_MODE برای تعیین حالت پیش‌فرض fetch (مثلا PDO::FETCH_ASSOC)
  3. حالت emulation: PDO::ATTR_EMULATE_PREPARES برای فعال/غیرفعال کردن شبیه‌سازی prepared statements
  4. حالت کاراکتر: PDO::MYSQL_ATTR_INIT_COMMAND برای تنظیم SET NAMES utf8

برای مثال، یک اتصال پیشرفته با تنظیمات مختلف به این شکل خواهد بود:

$options = [
  PDO::ATTR_ERRMODE => PDO::ERRMODE_EXCEPTION,
  PDO::ATTR_DEFAULT_FETCH_MODE => PDO::FETCH_ASSOC,
  PDO::ATTR_EMULATE_PREPARES => false,
  PDO::MYSQL_ATTR_INIT_COMMAND => "SET NAMES utf8"
];

$pdo = new PDO('mysql:host=localhost;dbname=testdb', 'username', 'password', $options);