۱۳۹۲ شهریور ۱۵, جمعه

در رابطه با PDO

PDO یک لایه ارتباطی با بانک اطاعاتی با یک روش یکسان برای دسترسی به پایگاه داده های متفاوت می باشد.

از آنجایی که در قسمت های مختلف صفحه اصلی تراکتور اف سی از PDO استفاده کرده ام قصد دارم مقداری در رابطه با این لایه یا افزونه مطالبی بنویسم

ای نوشته یک توضیح مختصر و کلی در رابطه با pdo هست شاید در مطالب بعدی اموزش کاملی از این لایه نوشتم



ارتباط

PDO یک راه اختصاصی از ارتباط با منبع داده ها که DSN نامیده میشود دارد. همچنین تعداد زیادی گزینه ی ارتباطی که PDO خود را بهینه کنید. برخی از این گزینه های به صورت پیش فرض تنظیم شده است مانند :‌

 
$dsn = "mysql:host=localhost;dbname=test;charset=utf8";
$opt = array(
PDO::ATTR_ERRMODE => PDO::ERRMODE_EXCEPTION,
PDO::ATTR_DEFAULT_FETCH_MODE => PDO::FETCH_ASSOC
);
$pdo = new PDO($dsn,'root','', $opt);

به این کد بالا دقت کنید .

  • $dsn : حاوی database driver درایور دیتابیس (mysql)  بعد host که localhost هست و نام دیتابیس که test قرار داده شده و charset که utf-8 انتخاب شده است . تمامی این پارامترها را میتوان با متغیر های دیگر نیز جایگزین کرد.

  • بعد از $dsn قسمت نام کاربری و رمز عبور می آید .

  • پارامتر $opt یک آرایه حاوی تنظیمات پیکربندی می باشد.


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

همچنین با استفاده از ATTR_DEFAULT_FETCH_MODE نحوه fetch را معین میکنید

 

شاید وجود prepared statements  یا ترجمه بیانیه های آماده :D اصلی ترین دلیل استفاده از PDO باشد

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

یکی از کابرد های Prepared Statements این هست که شما میتوانید با استفاده از اون چندین دستور مشابه با ارسال تنها متغیر اجرا کنید،

فرض کنید میخواهید در دیتابیس 2 ردیف ذخیره کنید ، اگر به روش قبلی بخواهید اینکارو انجام بدید باید 2 بار کوئری مشابه بنویسید که تنها مقادیر فیلد ها عوض خواهد شد

اما با Prepared Statements میتوانید یک کوئری بنویسید و مقداری فیلد ها را جداگانه به دیتابیس ارسال کنید در Prepared Statements شما به جای مقادیر یک مکان قرار میدهید جایگزین میتواند با نام باشد یا بدون نام

مکان بدون نام

در این روش شما به جای مقدار تنها علامت سوال ( ؟ ) قرار میدهید

مکان با نام

در این روش شما به جای مقدار تنها نامی برای ان مکان انتخاب میکنید ( دقت کنید نام با : شروع می شود )

هر کوئری در 3 یا 4 مرحله اجرا خواهد شد :

prepare() - اماده سازی کوئری و ایجاد بیانیه اشیا

bindValue() / bindParam() -  یک مرحله اختیاری متغیر هایی که میتوانند مستقیما وارد مرحله بعد شوند

execute() - مرحله اجرای واقعی کوئری

fetch - مرحله برگرداندن نتیجه اجرای کوئری به حالت قابل استفاده

یک مثال:
$id  = 1;
$stm = $pdo->prepare("SELECT name FROM table WHERE id=?");
$stm->execute(array($id));
$name = $stm->fetchColumn();

 دریافت نتایج

pdo متد های دم دست زیادی برای بازگرداندن نتایج کوئری به فرمت های مختلف دارد

fetch() - یک روش عمومی مثل mysql_fetch_array() می باشد

fetchAll() - برای گرفتن تمام ردیف ها بدون حلقه while

fetchColumn() - برای گرفتن مقدار عددی تنها بدون گرفتن آرایه

یک مثال از fetchAll()

 
$stm = $pdo->prepare("SELECT id,name FROM news WHERE dt=curdate()");
$stm->execute();
$data = $stm->fetchAll();

حال تمام داده ها را درون آرایه ی $data داریم  و میتوانیم به این صورت نمایش دهیم :

 
?>
<table>
<? foreach ($data as $row): ?>
<tr>
<td>
<a href="news.php?<?=$row['id']?>">
<?=htmlspecialchars($row['id'])?>
</a>
</td>
</tr>
<? endforeach ?>

 

سایت های مفیدی که میتونید در مورد pdo از آن ها استفاده کنید :‌

http://stackoverflow.com/tags/pdo/info

http://www.phpro.org/tutorials/Introduction-to-PHP-PDO.html

http://net.tutsplus.com/tutorials/php/php-database-access-are-you-doing-it-correctly/

http://net.tutsplus.com/tutorials/php/why-you-should-be-using-phps-pdo-for-database-access/

هیچ نظری موجود نیست:

ارسال یک نظر