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

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

Hybrid View

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

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

    متد quote جایگزین تابع mysql_real_escape_string


    با استفاده از این متد میتوانید در برابر حملات sql injection برنامه خود را محافظت کنید

    دقت داشته باشید قبل از اجرای این کد باید charset را ست کنید

    برای utf-8 کد زیر را به کار ببرید
    کد PHP:
    $db->exec("SET NAMES utf8"); 


    خوب 2 ارگومان تابع دارد

    ارگومان اول متغیر ما هست

    ارگومان دوم که اختیاری هست نوع متغیر رو بیان میکند برای مثال PDO::PARAM_STR یا PDO::PARAM_INT یا PDO::PARAM_NULL



    به توصیه PHP هم دقت کنید

    you are strongly recommended to use PDO::prepare() to prepare SQL statement
    همانطور که ذکر کرده استفاده ازین تابع توصیه نمیشود و سرعت کمتری دارند، به جای اون استفاده از prepare پیشنهاد شده که در اینده اموزش داده خواهد شد


    هشدار: این تابع برای تمام نوع متغیر ها quotes ( علامت ' ) را در 2 طرف متغیر قرار میدهد و نیاز به قرار دادن ان در کوئری نیست !


    مثال :
    کد PHP:
    $unsafe "I'm Ali!"//متغیر مورد نظر
    $safe $db->quote($unsafe); //مقدار خروجی : 'I''m Ali!' 



    اجرای کوئری Query با PDO

    خوب قسمت اصلی دیتابیس مسلما اجرای دستورات هست
    3 متد برای اینکار در PDO موجود هست که به توضیح 2 متد در اینجا اکتفا میکنم


    1-متد exec

    این متد دستورات شما رو اجرا میکند و تعداد ردیف تحت تاثیر را برمیگرداند ( برای UPDATE , DELETE و CREATE )

    هشدار: این متد برای دستورات SELECT به هیچ وجه کاربرد ندارد

    هشدار2: این تابع در صورت مواجه با خطا مقدار FALSE را برمیگرداند، برای مقایسه برای جلوگیری از اشتباه شدن مقدار FALSE با 0 باید از ==! استفاده کنید به مثال توجه کنید


    کد PHP:
    if($db->exec($query) === false // درست
        
    echo 'خطا رخ داد';
    if(
    $db->exec($query) == false // نادرست
        
    echo 'خطا رخ داد';
    if(! 
    $db->exec($query) ) //نادرست
        
    echo 'خطا رخ داد'

    2-متد query

    در صورتی که مایل به اجرای دستورات SELECT هستید ( برای بقیه دستورات هم میتوانید از این متد استفاده کنید ) این متد کاربرد دارد

    دقت کنید خروجی این متد یک شئ دیگر هست به نام PDOStatement

    و برای پردازش اطلاعات باید اموزش این شی که در اینده مطرح خواهد شد را بخوانید

    یک دستور ساده


    کد PHP:
    $query "SELECT * FROM `users`";

    $result $db->query($query); 
    //$result یک شئ از نوع دیگر است
    print_r($result->fetchAll()); 

    در مورد متد fetchAll بعدا صحبت خواهد شد فعلا بدانید این متد تمام ردیف ها را برمیگرداند و متد fetch یک ردیف را


    3-متد prepare

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

    خروجی این متد یک شئ دیگر هست به نام PDOStatement

    فعلا بدانید مثال بالا را با prepare میتوان به این شکل اجرا کرد


    کد PHP:

    $query 
    "SELECT * FROM `users`";

    $result $db->prepare($query); 
    $result->execute(); // این خط اضافه شده است

    print_r($result->fetchAll()); 

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


  3. #2
    عضو انجمن
    تاریخ عضویت
    Jul 2012
    نوشته ها
    243
    تشکر تشکر کرده 
    88
    تشکر تشکر شده 
    478
    تشکر شده در
    173 پست

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

    PDOStatement چیست ؟


    بعد از اجرای متد های prepare و query خروجی انها به صورت PDOStatement هست،

    PDOStatement در واقع شی ای برای پردازش اطلاعات می باشد و دارای متد های مختلفی هست

    در اینجا متد های مهم و پر کاربرد ذکر خواهد شد


    متغیر $result در اموزش ازین پس یک PDOStatement می باشد


    متد setFetchMode

    این متد همانند خصوصیت PDO::ATTR_DEFAULT_FETCH_MODE که در پست http://www.webhostingtalk.ir/f148/86678/#post819518 اموزش داده شد نحوه خروجی ردیف ها را تعیین می کند

    دقت کنید تفاوت ان این است که تنها برای این شی کاربرد دارد

    برای مثال اگر شما 2 PDOStatement دارید و در یکی این خصوصیت را تغییر دهید در دیگری تغییر نمیکند

    مقدار پیشفرض ان مقداری است که به PDO::ATTR_DEFAULT_FETCH_MODE دادید


    متد fetch

    این متد یک ردیف را برمیگرداند ( خروجی بسته به fetchmode میتواند ارایه یا شی باشد )

    دقت کنید در ورودی این متد هم میتوانید نحوه خروجی را جدا تنظیم کنید

    برای مثال

    کد PHP:
    $result->fetch(PDO::FETCH_OBJ

    متد fetchAll

    این متد ارایه ای از تمام ردیف ها را بر میگرداند ( مقدار هر فیلد ارایه بسته به fetchmode میتواند ارایه یا شی باشد )

    دقت کنید در ورودی این متد هم میتوانید نحوه خروجی را جدا تنظیم کنید


    متد rowCount

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

    در صورتی که دستور INSERT , UPDATE , DELETE اجرا شده باشد تعداد ردیف های تحت تاثیر قرار گرفته را بر میگرداند

    در غیر این صورت در بعضی از دیتابیس ها ( از جمله MySQL ) اگر دستور SELECT اجرا شده باشد تعداد ردیف های انتخابی را برمیگرداند

  4. تعداد تشکر ها از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

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

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