از طریق ثابت PDO و تابع زیر به اطلاعاتی کلی در مورد دیتابیس میرسیم:
var_dump(PDO::getAvailableDrivers());
در کد زیر جهت یک اتصال به روش PDO میبینیم که ابتدا درایور مورد نظر را معرفی کرده و سپس جزئیات آن از قبیل host و… را مشخص میکنیم:
$handler = new PDO('mysql:host=localhost;dbname=blog','root','');
حال اگر خطایی در اتصال وجود داشته باشد، از طریق روش زیر آن را مدیریت میکنیم. در مثال زیر نام دیتابیس اشتباه وارد شده است:
try{
$handler = new PDO('mysql:host=localhost;dbname=blogQ','root','');
$handler->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
}catch(PDOException $e){
echo $e->getMessage();
die();
}
حال مانند زیر به سادگی اطلاعات را از جدول مورد نظرمان میخوانیم:
$query = $handler->query("SELECT * FROM firsttable");
while($row = $query->fetch()){
echo $row['name'],' ',$row['family'],'<br>';
}
نکته: تابع fetch به صورت پیشفرض قادر است آرایهها را همزمان به صورت Associative و Numeric برگرداند. پس ما هم به کلیدها به صورت عددی و هم به صورت اسمی دسترسی خواهیم داشت. به عبارت دیگر پیشفرض تابع fetch به صورت زیر است و مقدار پاس داده شده با مقدار خالی برابری میکند:
fetch();
fetch(PDO::FETCH_BOTH);
اگر هم فقط به مقدار عددی بخواهیم دسترسی داشته باشیم، به صورت زیر است:
fetch(PDO::FETCH_NUM);
برای دسترسی به حالت Associative یا به عبارتی حالتی که کلیدها بر اساس نام باشند، از حالت زیر استفاده میکنیم:
fetch(PDO::FETCH_ASSOC);
حالت دیگر دسترسی به صورت Object است:
fetch(PDO::FETCH_OBJ);
در حالت Object دسترسی به مقادیر متفاوت است. به همین دلیل مثال خواندن اطلاعات را به صورت زیر بازنویسی کردهام:
$query = $handler->query("SELECT * FROM firsttable");
while($row = $query->fetch(PDO::FETCH_OBJ)){
echo $row->name,' ',$row->family,'<br>';
}
نکته: همچنین علاوه بر fetch میتوانیم از fetchAll استفاده کنیم. برخلاف fetch، از fetchAll میتوانیم بدون حلقه نیز استفاده کنیم و تمام اطلاعات داخل جدول را برای ما واکشی میکند:
$query = $handler->query("SELECT * FROM firsttable");
$row = $query->fetchALL(PDO::FETCH_ASSOC);
echo '<pre>',print_r($row),'</pre>';