اتصال با 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 امکان تنظیمات پیشرفتهای را فراهم میکند که میتواند عملکرد اتصال را بهبود بخشد:
- حالت خطایابی: PDO::ATTR_ERRMODE با مقادیر PDO::ERRMODE_SILENT، PDO::ERRMODE_WARNING و PDO::ERRMODE_EXCEPTION
- حالت بازیابی: PDO::ATTR_DEFAULT_FETCH_MODE برای تعیین حالت پیشفرض fetch (مثلا PDO::FETCH_ASSOC)
- حالت emulation: PDO::ATTR_EMULATE_PREPARES برای فعال/غیرفعال کردن شبیهسازی prepared statements
- حالت کاراکتر: 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);