در ادامهی پُست قبل که مربوط به PDO بود با تابع fetch آشنا شدیم، در این نوشته قصد داریم با تابع setFetchMode آشنا شده و به وسیلهی این تابع، اطلاعات دیتابیس را به یک کلاس منتقل و عملیات خود را روی آن انجام دهیم. پس در نهایت کدهای جلسهی قبل را بازنویسی خواهم کرد.
فرض بر این است نام کلاس مورد نظرم UserScore باشد. لازم است که Fetch Mode را برای Class مورد نظرم سِت کنم:
$query->setFetchMode(PDO::FETCH_CLASS,'UserScore');
داخل کلاس UserScore هم ابتدا Propertyها یا همان متغیرهای خود را همنام با نام فیلدهای جدولم تعریف کردم. (لازم به ذکر است که جدول مورد نظر من شامل فیلدهای id,name,family,phone,score است). پراپتی message هم به صورت رزرو جهت ذخیرهی پیام مورد نظرم ایجاد نمودم.
Method یا همان تابع construct هم حاوی پیامی است که قصد دارم نمایش داده شود. همانطور که اطلاع داریم، متد construct با صدا زدن کلاس UserScore بلافاصله اجرا خواهد شد.
class UserScore{
public $id,$name,$family,$phone,$score,$message;
public function __construct(){
$this->message = "{$this->name} {$this->family}'s Score is {$this->score}";
}
}
حال کد کل پروژه به صورت زیر خواهد بود که نتیجهی آن نمایش امتیاز هر کاربر با فرمت تعیین شده است:
try{
$handler = new PDO('mysql:host=localhost;dbname=blog','root','');
$handler->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
}catch(PDOException $e){
echo $e->getMessage();
die();
}
class UserScore{
public $id,$name,$family,$phone,$score,$message;
public function __construct(){
$this->message = "{$this->name} {$this->family}'s Score is {$this->score}";
}
}
$query = $handler->query("SELECT * FROM firsttable");
$query->setFetchMode(PDO::FETCH_CLASS,'UserScore');
while($row = $query->fetch()){
//echo '<pre>',print_r($row),'</pre>';
echo $row->message,'<br>';
}
نکته: قسمتی که کامنت شده، جهت نمایش کل اطلاعات به صورت آرایهای است.