رفتن به مطلب

راه امن‌تر اتصال به دیتابیس: PDO


Ehsaan

ارسال‌های توصیه شده

سلام دوستان؛ طبق درخواست یکی از دوستان، آموزش PDO رو به صورت متنی قرار میدم.

 

بیش‌تر دوستان از MySQL Improved برای اتصال به دیتابیس استفاده میکنن که به هیچ عنوان امن نیست و امن‌کردن اون هم کار راحتی نیست. علاوه بر این، MySQLi در کوئری‌های سنگین و زیاد کم میاره.

 

راه بهتر، ساده‌تر، امن‌تری هم هست که به نام PDO شناخته میشه.

 

اتصال به دیتابیس

خب، اولین مرحله، اتصال به دیتابیس هست. شما میتونید این دستورات رو توی یه فایل مشخص مثل init یا bootstrap بنویسید (یا هر اسم دیگه).

<?php
$db = new PDO( 'mysql:host=localhost;dbname=your_db;charset=utf8', 'username', 'password' );

 

شما میتونید به جای localhost آدرس هاست MySQL خودتون رو بزارید؛ به جای your_db اسم دیتابیستون، به جای username نام کاربری و password رمزعبور ورود به MySQL

 

اجرای یه کوئری

شما می‌تونید خیلی راحت یه کوئری اجرا کنید و مشتقات اون رو هم بگیرید. فقط دقت کنید که باید $db رو داشته باشید. بنابراین شما باید دستورات خودتون رو در همون فایل اجرا کنید یا اینکه هربار به دیتابیس وصل شید (تاثیری در سرعت نداره).

 

$db->query( 'SELECT * FROM table' );

برای خروجی گرفتن میتونید به این صورت استفاده کنید:

$stmt = $db->query( 'SELECT * FROM table' );
while( $row = $stmt->fetch( PDO::FETCH_ASSOC ) ) {
echo $row['name'] . ' - ' . $row['content'];

 

همچنین میتونید برای دستورات INSERT, UPDATE, DELETE از دو مثال پیش استفاده کنین.

 

همچنین، اگه میخواید داده ای از کاربر دریافت کنید، قطعاً خطر هک وجود داره، شما میتونید به راحتی از این خطر پیشگیری کنید:

$stmt = $db->prepare( 'INSERT INTO somewhere VALUES( ?, ? );
$stmt->execute( array( $name, $content ) );

 

شما میتونید از تراکنش‌ها برای کوئری‌های زیاد و سنگین استفاده کنید تا هم سرعت بسیار بالاتر باشه و هم امکان بازگردوندن باشه.

<?php
try {
$db->beginTransaction();
 
$db->exec("SOME QUERY");
 
$stmt = $db->prepare("SOME OTHER QUERY?");
$stmt->execute(array($value));
 
$stmt = $db->prepare("YET ANOTHER QUERY??");
$stmt->execute(array($value2, $value3));
 
$db->commit();
} catch(PDOException $ex) {
//Something went wrong rollback!
$db->rollBack();
echo $ex->getMessage();
}

 

سوالی بود، درخدمتم.

 

موفق باشید.

 

لینک ارسال
به اشتراک گذاری در سایت های دیگر

یه سوال به نطر شما اگه در سرویس CRUD خوذمون که به عنوان وب سرویس هم استفاده میشه از Session استفاده کنیم که با دستگاه لاگین بشه کار غیر منطقی هست ؟

لینک ارسال
به اشتراک گذاری در سایت های دیگر

خیر، فقط باید دستگاه رو به خوبی هماهنگ کنید که Session ID به هم نخوره.

خود من معمولاً از RSA استفاده میکنم که البته روی هاست هایی که IP Static دارن جواب میده.

ولی روی همون هاست اشتراکی شما میتونید از Session استفاده کنید.

 

موفق باشید.

لینک ارسال
به اشتراک گذاری در سایت های دیگر

در خصوص RSA توضیح میدید؟

لینک ارسال
به اشتراک گذاری در سایت های دیگر

RSA رو با استفاده از کلیدی که روی سرور و روی موبایل بود ساختم (البته، این معمولاً وقتی کاربرد داره که دیوایس‌های شما کنترل‌شده باشن) و RSAرو هر بار با استفاده از OpenSSL تایید صلاحیت کردم، در صورتی که صلاحیت اون مشکلی نداشت، عمل انجام میشد.

 

موفق باشید.

لینک ارسال
به اشتراک گذاری در سایت های دیگر

  • 5 ماه بعد...

اقا من بلد نیستم با دیتابیس کار کنم و این پست های بالا رو هیچی نفهمیدم  :'(

لینک ارسال
به اشتراک گذاری در سایت های دیگر

اقا من بلد نیستم با دیتابیس کار کنم و این پست های بالا رو هیچی نفهمیدم  :'(

خوب برادر من ۱۰۰تا اموزش هست

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

ی نگاهی ب تاریخ‌ تاپیک بنداز :roomNemishe:

لینک ارسال
به اشتراک گذاری در سایت های دیگر

بایگانی شده

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

  • کاربران آنلاین در این صفحه   0 کاربر

    • هیچ کاربر عضوی،در حال مشاهده این صفحه نیست.
×
×
  • اضافه کردن...