نمایش نتایج: از شماره 1 تا 8 , از مجموع 8

موضوع: هشدار جدی در مورد توابع دیتابیس php و اموزش PDO

Threaded View

پست قبلی پست قبلی   پست بعدی پست بعدی
  1. #7
    عضو انجمن
    تاریخ عضویت
    Jul 2012
    نوشته ها
    243
    تشکر تشکر کرده 
    88
    تشکر تشکر شده 
    478
    تشکر شده در
    173 پست

    پیش فرض پاسخ : هشدار جدی در مورد توابع دیتابیس php و اموزش PDO

    Prepared Statements( متد prepare )

    تا اینجا اکثر توضیحات جایگزینی برای توابع mysql بود و با توضیحات بالا تقریبا میتوانید توابع را جایگزین کنید

    اما دست نگه دارید !

    امکان جدیدی اضافه شده است !

    Prepared Statements !

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

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


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

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


    در Prepared Statements شما به جای مقادیر یک مکان قرار میدهید

    جایگزین میتواند با نام باشد یا بدون نام


    مکان بدون نام

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

    برای مثال
    کد PHP:
    $query "SELECT * FROM `users` WHERE username = ?";
    $result $db->prepare($query); 

    مکان با نام

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

    برای مثال

    کد PHP:
    $query "SELECT * FROM `users` WHERE username = :username"// :username
    $result $db->prepare($query); 



    مقدار دهی به مکان با متد bindParam از PDOStatement


    در هردو روش مکان دهی بعد از اجرای متد prepare خروجی همانطور که ذکر شد شی PDOStatement هست

    این شئ متدی به نام bindParam دارد که با کمک ان میتوان مقدار مکان ها را مشخص کرد

    برای مثال

    در روش بدون نام

    ورودی اول شماره مکان است


    کد PHP:
    $result->bindParam(1$_POST['username']); 

    در روش با نام

    ورودی اول نام مکان است


    کد PHP:
    $result->bindParam(':username'$_POST['username']); 

    دقت کنید برای تاکید ورودی را از متغیر POST دادم ( که کاربر وارد میکنه ) که بیان کنم این روش کاملا در برابر تزریق کد امن هست





    اجرای Prepared Statement


    برای اجرای کوئری بعد از مقدار دهی به مکان ها با استفاده از متد execute در PDOStatement دستور را اجرا میکنیم

    مثال
    کد PHP:
    $result->execute();

    print_r($result->fetchAll); 

    روش کوتاه برای مقدار دهی مکان ها با تابع execute

    مثلا استفاده از تابع bindParam برای تک تک مکان ها کاری سخت هست

    روش سریع تری برای اینکار وجود دارد

    برای این روش مقداری را به صورت ارایه به متد execute ارسال کنید

    در روش بدون نام ارایه بدون اندیس یا با اندیس شماره ها می باشد

    در روش با نام اندیس باید نام مکان باشد ( بدون : )

    مثال بدون نام

    کد PHP:
    $query "SELECT * FROM `users` WHERE username = ? AND password = ?";
    $result $db->prepare($query); 
    $result->execute(array($username,$password)); 
    مثال با نام

    کد PHP:
    $query "SELECT * FROM `users` WHERE username = :username AND password = :password";
    $result $db->prepare($query); 
    $result->execute(array('username'=>$username,'password'=>$password)); 



    اجرای چند کوئری مشابه با یک کوئری

    با استفاده از این امکان میتوانید در سرعت و حجم کد ها تغییر ایجاد کنید

    برای اینکار کافی هست ابتدا مکان ها را ست کنید و بعد از اجرای execute مکان های جدید قرار دهید و دوباره دستور execute را اجرا کنید

    مثال

    کد PHP:
    $query "INSERT INTO `users` (`username`,`password`) VALUES (:username,:password)";
    $result $db->prepare($query); 
    $result->execute(array('username'=>'test','password'=>'test')); // ساخت یوزر جدید

    $result->execute(array('username'=>'admin','password'=>'admin')); // ساخت یوزر دیگر با همان دستور 

  2. تعداد تشکر ها ازcooper47 به دلیل پست مفید


اطلاعات موضوع

کاربرانی که در حال مشاهده این موضوع هستند

در حال حاضر 1 کاربر در حال مشاهده این موضوع است. (0 کاربران و 1 مهمان ها)

موضوعات مشابه

  1. مدیریت محتوای پردیس در نمایشگاه رسانه های دیجیتال 93
    توسط bazar30t در انجمن اسکریپت های دیگر
    پاسخ ها: 1
    آخرين نوشته: September 4th, 2014, 12:53
  2. پاسخ ها: 8
    آخرين نوشته: December 27th, 2012, 14:10
  3. پاسخ ها: 0
    آخرين نوشته: February 20th, 2012, 00:07
  4. چند روز پیش دیتابیس دایرکت ادمین هک شده ( همه توجه کنند)
    توسط kaywon در انجمن دايرکت ادمين DirectAdmin
    پاسخ ها: 5
    آخرين نوشته: June 14th, 2011, 11:45
  5. مدیریت محتواهای بدون دیتابیس flat-CMS
    توسط khudeman در انجمن دیگر سیستم ها
    پاسخ ها: 9
    آخرين نوشته: June 8th, 2010, 20:36

مجوز های ارسال و ویرایش

  • شما نمیتوانید موضوع جدیدی ارسال کنید
  • شما امکان ارسال پاسخ را ندارید
  • شما نمیتوانید فایل پیوست کنید.
  • شما نمیتوانید پست های خود را ویرایش کنید
  •