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

fareghi

عضویت : 1398/01/13 پرسش ها : 7 پاسخ ها : 4

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

ارسال شده در : ‫۵ ماه قبل، دو شنبه ۶ آبان ۱۳۹۸، ساعت ۲۲:۳۶

سلام و عرض ادب خدمت استاد عزیز

موردی هست که برام بسیار سوال برانگیز هست

    public function delete($table , $id)
    {
        $sql = "DELETE FROM ". $table ." WHERE `id` = ?";

......

توی این کد و موارد مشابه id در این جا مقدار دهی نمیشه و در بخش execute مقدار مورد نیاز بهش پاس داده میشه حالا سوال اینه که وقتی $id در زمان صدا زدن function delete مقدار دهی شده و قابل دسترس هست چرا وقتی میتونیم توی همین sql مقدارش را بهش بدیم این کارو با یک ؟ موکول میکنیم به زمان execute . این مورد در update هم وجود داره با این حالی که من مثل شما نوشتم اما میخواستم ببینم راحت تر نیست که همون اول کار را تمام کنیم .

با سپاس فراوان

حسن خسروجردی

عضویت : 1397/03/07 پرسش ها : 0 پاسخ ها : 1163

(پاسخ صحیح)

ارسال شده در :‫۵ ماه قبل، دو شنبه ۶ آبان ۱۳۹۸، ساعت ۲۳:۵۲

با سلام خدمت شما همراه گرامی

 

بله دوست عزیزم کاری که شما میفرمایید سمت برنامه نویس خیلی راحت تر هست و میتونیم خیلی ساده تر و حتی قابل فهم تر id رو جایگزین کنیم و نتیجه بگیریم اما این روش توی کوئری های بزرگ و زیاد جواب نمیده باعث کاهش بازدهی میشه چرا؟

در کل ما به سه دلیل از Prepared Statements and Bound Parameters (همین روش ؟ ) استفاده میکنیم

اول : زمان parse کردن یا تجزیه کردن سمت دیتابیس ما خیلی کمتر میشه چون ما فقط یکبار به سمت دیتابیس بدنه ی اصلی کوئری رو ارسال میکنیم و هر بار فقط با پارامتر هایی که داره اون هارو اجرا یا execute میکنیم که این مورد خیلی خیلی توی سرعت و بهینه سازی کمک میکنه

دوم :با توجه به مورد بالا این کار باعث اشغال شدن پهنای باند کمتری روی سرور میشه چون هر سری فقط پارامتر ها ارسال میشن نه کل کوئری

سوم : مهمترین نکته استفاده از این روش این هست که از sql injection جلوگیری میکنه چون statement اصلی ما از خارج وارد برنامه نمیشه ( در مورد sql injection حتما تحقیق کنید مورد بسیار مهمی هست)

 

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

موفق و سربلند باشید

0 تشکر

fareghi

عضویت : 1398/01/13 پرسش ها : 7 پاسخ ها : 4
ارسال شده در :‫۵ ماه قبل، سه شنبه ۷ آبان ۱۳۹۸، ساعت ۰۸:۱۴

با سلام مجدد

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

0 تشکر

حسن خسروجردی

عضویت : 1397/03/07 پرسش ها : 0 پاسخ ها : 1163
ارسال شده در :‫۵ ماه قبل، سه شنبه ۷ آبان ۱۳۹۸، ساعت ۱۰:۵۹

سلامت باشید انجام وطیفه هست

0 تشکر

برای ارسال پاسخ باید وارد شوید و یا در سایت عضو شوید