رفتن به مطلب

آموزش کار با متد PDO


پست های پیشنهاد شده

سلام دوستان

خب همگی می دونید که برای کار با بانک های اطلاعاتی در PHP سه تا متد معرفی شده. متد اول MySQL هست. خب این روش به دلیل مشکلاتی که تو امنیت و بحث SQL Injection داشت کم کم کنار رفت. یعنی خود مایکروسافت اونو کنار گذاشت. ولی خب به جاش MySQLI رو ارائه داد. میشه گفت نسخه تکمیل شده همون MySQL هست. با این دو تا روش شما فقط می تونید با بانک MySQL کار کنید.

PDO وقتی ارائه شد کم کم همه رو به سمت خودش جذب کرد. حالا چرا؟

دلیل اول اینه که شما با این روش می تونید به 12 تا بانک مختلف مثل SQL Lite و SQL Server کار کنید، در صورتی که با روش MySQLI شما فقط با یک بانک می تونید کار کنید که اونم خود MySQL هست.

مزیت بعدی امنیت و شی گرایی هست که در روش PDO بسیار تقویت شده.

خودم هم تازه با این متد شروع به کار کردم. اگه مایل باشید می تونیم آموزش رو ادامه بدیم. (البته در حدی که خودم بلدم :) )

دوستان خواهشنا داخل نظرسنجی شرکت کنید و تو این تاپیک پست ارسال نکنید تا بتونیم آموزش ها رو منظم قرار بدیم.

لینک به ارسال
  • 2 هفته بعد...

بخش اول آموزش PDO - ایجاد کانشکن

سلام دوستان

امروز می خوایم بخش اول آموزش رو شروع کنیم.

همون طور که در بالا گفتم، PDO یک متد یا بهتر بگم یک روش برای اتصال و کار با بانک های اطلاعاتی با PHP هست. در مرحله اول باید کانکشن خودمون رو بنویسیم. مثل روش های قبلی ابتدا نام سرور، نام دیتابیس، کاربری و رمز رو میگیریم و داخل متغیر ذخیره می کنیم. به صورت زیر:


$servername="localhost";
$dbname="pdo";
$username="root";
$password="";

یه پارامتر دیگه هست به نام dsn که یه خورده فکر کنم جدیده!

این dsn امنیت کانکشن رو تامین می کنه و به صورت زیر باید نوشته بشه:


$dsn="mysql:host=$servername;dbname=$dbname";

نوع بانک، نام سرور و نام دیتابیس رو به این صورت میگیره.

حالا باید یه شی PDO بسازیم. PDO مخفف PHP Data Object هست. تو این روش مفهمو شی گرایی پیاده سازی شده. بعد از ساختن شی، باید با پارامتر هایی که قبلا پر کردیم کانشکن رو ایجاد کنیم. به صورت زیر:


$connect=new PDO($dsn,$username,$password);

بعد متغیر شی رو return می کنیم.


return $connect;

PDO برای خطایابی هم فکرهای خوبی کرده. شما می تونید تو تمام مراحل کار با PDO بحث خطایابی رو داشته باشید. حالا در این قسمت ما می خوایم کانشکن رو خطایابی کنیم. بیبنیم که درست وصل شدیم یا نه.

اول باید کدهامون رو داخل بلاک try catch بزاریم.


<?php
try{
$servername="localhost";
$dbname="pdo";
$username="root";
$password="";
$dsn="mysql:host=$servername;dbname=$dbname";
$connect=new PDO($dsn,$username,$password);
return $connect;
}
catch(PDOException $error)
{
echo "Error In Connect!";
exit();
}
?>

try تلاش می کنه تا به کانشکن وصل بشه. اگه شد پیغام مناسب و اگه نشد پیغام خطا نمایش میده. این کد نهایی برای کانکشن ما هست. می تونید داخل یه فایل بنویسید و هر لازم استفاده کنید با دستور زیر فایل رو فراخوانی کنید:


<?php include "connection.php"; ?>

خب برای قسمت اول فکر می کنم کافی باشه. در قسمت بعد بحث خواندن اطلاعات از دیتابیس رو مطرح می کنیم.

لینک به ارسال

بخش دوم آموزش PDO - خواندن اطلاعات از دیتابیس

سلام دوستان

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

قبل از هر چیز اتصال به دیتابیس رو برقرار می کنیم.

روش کار تقریبا مثل متدهای قبلی هست اما یه سری تغییرات داره. در مرحله اول باید کوئری مورد نظرمون رو بنویسیم. من اینجا خروجی کوئری رو داخل متغیر sql ذخیره می کنم.


$sql="SELECT * FROM tbl_user";

با این دستور من گفتم که کلیه سطرهای جدول tbl_user رو برای من انتخاب کن و داخل sql بریز.

بعد باید کوئری اجرا بشه. با دستور زیر:


$result=$connect->query($sql);

اینجا هم اومدم خروجی کوئری اجرا شده رو داخل result ریختم تا بتونم ازش استفاده کنیم.

نکته: connect همون متغیری هست که اتصال ما به دیتابیس رو برقرار کرده.

حالا نوبت اینه اطلاعات تک تک ستون های جدول رو بخونیم و نمایش بدیم. 2 راه برای این کار هست. یکی استفاده از حلقه while دیگری استفاده از for each. من از روش دوم استفاده می کنم. چون ساده تر هست.


foreach ($result as $rows)
{
echo $rows['id'] . "<br>";
echo $rows['name']."<br>";
}

حلقه for each ورودی آرایه داره. من با متغیر rows که با as استفاده کردم دارم رو آیتم های آرایه ای که داخل Result داشتم کار می کنم.

پس کد کامل شده به صورت زیر در میاد:


<?php
$sql="SELECT * FROM tbl_user";
$result=$connect->query($sql);
foreach ($result as $rows)
{
echo $rows['id'] . "<br>";
echo $rows['name']."<br>";
}
?>

به همین سادگی ما تونستیم یه سری اطلاعات موجود در جدولی از دیتابیس رو بخونیم و نمایش بدیم.

امیدوارم کاربردی باشه براتون. تو قسمت بعد نحوه درج اطلاعات در جدول رو یاد می گیریم.

لینک به ارسال

بخش سوم آموزش PDO - ساخت فرم لاگین

سلام دوستان

امیدوارم حالتون خوب باشه. تو این قسمت می خوایم یه فرم لاگین امن با متد PDO ایجاد کنیم.

کانشکن رو داخل فایل connection.php داریم.(آموزش های قبلی). پس برای شروع اول فایل connection رو include می کنیم به صفحه. به صورت زیر:


<?php include"connection.php"; ?>

حالا باید فرم رو بسازیم. 2 تا کادر متن لازم داریم. یکی برای دریافت نام کاربری یه هم رمز. و یک دکمه برای ارسال اطلاعات. به صورت زیر فرم رو طراحی می کنیم:


<form name="login" method="post">
<label>نام کاربری:</label><input type="text" name="user">
<br>
<label>رمز ورود:</label><input type="text" name="pass">
<input type="submit" name="login">
</form>

من قبلا تو جدولی به نام login دو تا سطر تعریف کردم. یکی برای نام کاربری یکی هم رمز. یه رکورد پیشفرض هم بهش دادم. حالا باید مقادیری رو که کاربر وارد می کنه با اون مقادیر مقایسه کنم. اگه برابر بود اجازه ورود بدم.

می خوایم سطح کنترل برنامه رو یه کم ببریم بالا. اول باید چک کنیم ببینیم اصلا دکمه زده شده یا نه. (شرط اول داخل دستور زیر).

بعد باید چک کنیم که کادرهای متن خالی نباشند.(شرط دوم داخل دستور زیر). اگه خالی بود و دکمه زده شد باید یه پیغام نشون بدیم که چیزی وارد نشده!

در غیر این صورت (یعنی اون دو تا شرط برقرار باشه = دکمه زده شده و مقدار وارد شده) باید کوئری مورد نظر رو بنویسیم و دستورات رو اجرا کنیم.


<?php
if(isset($_POST['login']))
{
if(empty($_POST['user']) || empty($_POST['pass']))
{
echo "User or Pass is Empty!!";
}
else
{
$sql="SELECT COUNT(*) FROM login WHERE name=? and pass=?";
$result=$connect->prepare($sql);
$result->bindValue(1,$_POST['user']);
$result->bindValue(2,$_POST['pass']);
$result->execute();
$num=$result->fetchColumn();
if($num==1)
{
echo "yes";
}
else
{
echo "no";
}
}
}
?>

اگه با ساختار کوئری های sql آشنا باشید می دونید دستور Select خروجی جدول داره. ما اومدیم تعداد سطرهایی که مقدار name و pass مساوی مقادیری که کاربر وارد کرده رو میگیریم. اگه 1 باشه یعنی یه سطر مساوی پیدا کردیم، در نتیجه اجازه ورود میدیم.

حالا چرا جلوی name و pass ما ? گذاشتیم؟ این یک تکنیک جدید داخل PDO هست. ما با دستور BindValue اومدیم به هر ؟ به ترتیب مقدار دادیم. یه مرحله از امنیت عملا اینجا برای ما تامین شد. اما prepare داره چیکار میکنه؟ این دستور یه مرحله قبل از اجرای نهایی کوئری هست. قبل از اینکه ما به ؟ ها مقدار بدیم اومدیم کوئری رو preapare کردیم و داخل متغیر Result ریختیم. یه مرحله دیگه از امنیت هم ایجا مشخص شد برامون. در آخر هم با Execute اجرا کردیم.

تا اینجا ما اومدیم به بانک وصل شدیم، جستجو کردیم که آیا مقادیری که کاربر وارد کرده داخل جدول وجود داره یا نه. گفتیم اگه وجود داشته باشه خروجی تابع 1 و اگه نباشه 0 هست.

در مرحله بعد با FetchColumn تعداد ستون ها رو می خونیم. بعد یه شرط گذاشتیم و تمام.. من اومدم یه پیغام نمایش دادم. شما می تونید به جای پیغام انتقال بدین به صفحه مدیریت.

کد کامل شده به صورت زیر دی میاد:


<fieldset>
<legend>ورود به سایت</legend>
<?php
if(isset($_POST['login']))
{
if(empty($_POST['user']) || empty($_POST['pass']))
{
echo "User or Pass is Empty!!";
}
else
{
$sql="SELECT COUNT(*) FROM login WHERE name=? and pass=?";
$result=$connect->prepare($sql);
$result->bindValue(1,$_POST['user']);
$result->bindValue(2,$_POST['pass']);
$result->execute();
$num=$result->fetchColumn();
if($num==1)
{
echo "yes";
}
else
{
echo "no";
}
}
}
?>
<form name="login" method="post">
<label>نام کاربری:</label><input type="text" name="user">
<br>
<label>رمز ورود:</label><input type="text" name="pass">
<input type="submit" name="login">
</form>
</fieldset>

سوالات و نظرات خودتون رو در این تاپیک بنوسید.

با سپاس

لینک به ارسال
  • 2 هفته بعد...

بخش چهارم آموزش PDO - هش کردن رمز ورود

سلام دوستان

امیدوارم حالتون خوب باشه. تو این آموزش قصد داریم رمز ورود فرم لاگین رو هش کنیم. Hash کدها به طور خلاصه کدهایی هستند بر اساس الگوریتمهایی که با محاسبات بر روی فایل ها تولید می شوند.

در مرحله اول باید با استفاده از md5 رمز مورد نظر رو هش کنیم. تابع مربوط رو به صورت زیر می نویسیم:


<?php
function hash_value($value)
{
return md5($value) . "ka23$%gdfg%&&Ha";
}
?>

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

می تونیم قبل از ارسال رمز به بانک کد رو هش کنیم و سپس درج کنیم. به صورت زیر:


$pass = hash_value("admin");

روش جالبیه. به نظر من برای امنیت لازمه. حتما استفاده کنید.

تاپیک سوالات و نظرات آموزش PDO

لینک به ارسال
  • 7 ماه بعد...

بخش پنجم آموزش PDO - درج اطلاعات در جدول

سلام دوستان.

امیدوارم حالتون خوب باشه. تو این قسمت درج اطلاعات در جدول رو یاد میگیریم. به عنوان مثال یه جدول ثبت نام داریم با نام register که دارای فیلد های زیره:


id - name - family - phone

خب در مرحله اول اتصال فایل کانکشن با دستور زیر رو فراموش نکنید. داخل صفحه ای که دارید کد می نویسید باید فایل connection.php متصل شده باشه.


<?php include"connection.php"; ?>

در مرحله بعد باید کوئری درج رو بنویسیم. به صورت زیر:


$statement = $connect->prepare("INSERT INTO Register(id,name, family, phone)
VALUES(?, ?, ?, ?)");
$statement->execute(array("10","morteza", "mahdavi", "09130000000"));

موفق باشید.

تاپیک سوالات و نظرات آموزش PDO

لینک به ارسال

به گفتگو بپیوندید

هم اکنون می توانید مطلب خود را ارسال نمایید و بعداً ثبت نام کنید. اگر حساب کاربری دارید، برای ارسال با حساب کاربری خود اکنون وارد شوید .

مهمان
ارسال پاسخ به این موضوع ...

×   شما در حال چسباندن محتوایی با قالب بندی هستید.   حذف قالب بندی

  تنها استفاده از 75 اموجی مجاز می باشد.

×   لینک شما به صورت اتوماتیک جای گذاری شد.   نمایش به صورت لینک

×   محتوای قبلی شما بازگردانی شد.   پاک کردن محتوای ویرایشگر

×   شما مستقیما نمی توانید تصویر خود را قرار دهید. یا آن را اینجا بارگذاری کنید یا از یک URL قرار دهید.

×
×
  • اضافه کردن...