PDA

View Full Version : بهینه ترین روش استفاده از pdo چیست؟



ferybasafa
جمعه 15 فروردین 1393, 16:42 عصر
با عرض سلام و خسته نباشید
من دارم جدیدا روی پروژه ای در php کار می کنم و اولین بارمه که از pdo استفاده می کنم و چندتا سوال داشتم که اگر اشکالی نداشته باشه همینجا می پرسم. از مدیران هم خواهش میکنم اگر تاپیک رو در جای اشتباهی زدم یا تکراریه اول اطلاع بدن بعد انتقال و یا حذف انجام بدن. ممنون

من طبق تحقیقی که داشتم بستن کانکشن های pdo با از بین بردن شیءش انجام میشه. یعنی وقتی که unset میشه یا = null میشه کانکشن داخلیش هم خود به خود بسته میشه. اما سوالم اینه که در pdo هم بستن کانکشن بعد از اجرای query ها ضروریه؟

بزارید واضحتر بگم. صفحه بارها ممکنه در حال اجرای سیستم به جدول های مختلفی وصل بشه. مثلا برای لاگین شدن یه بار به جدول users وصل میشه. (یعنی یک شیء pdo ایجاد میشه) و بعدش برای بارگزاری مطالب به جدول محتوا وصل میشه و یک شیء دیگه ایجاد میشه.
حالا دیگه ممکنه از جدول کاربران استفاده نشه ولی صفحه هنوز به این جدول کانکت هست.
آیا این در هنگام بارگزاری صفحه برای هزاران نفر (!) فشار اضافی به سرور وارد نمیکنه؟:متفکر:

maysam.m
جمعه 15 فروردین 1393, 17:16 عصر
روی چه چیزهایی حساس میشید :لبخند: به نظر من که مشکلی پیش نمیاد

ferybasafa
جمعه 15 فروردین 1393, 22:28 عصر
خب اولین بارمه از pdo استفاده میکنم و واقعا نمیدونم که این موضوع مهم هست یا نه! :لبخند:
آخه یه جا خوندم که توی pdo کانکشن ها به صورت اتوماتیک بسته میشن.
آیا واقعا این موضوع اهمیتی نداره؟ دوستان نظر دیگه ای ندارند؟ :متفکر:

saeedvir
شنبه 16 فروردین 1393, 08:18 صبح
يه جا خوندم که اگر کانکشن را نبنديد ، mysql (نسخه هاي جديد) از آخرين اتصال باز استفاده ميکنه بنابراين به نظر ميرسه که اصلا ضروري نيست که ببنديد.

mehdytux
شنبه 16 فروردین 1393, 09:15 صبح
موتور php در انتهای اسکریپت تمامی کانکشن های باز رو می بنده. پس مشکلی نیست

MMSHFE
شنبه 16 فروردین 1393, 10:05 صبح
سوالم اینه که در pdo هم بستن کانکشن بعد از اجرای query ها ضروریه؟
بطور کلی هرموقع به دیتابیس احتیاجی ندارین بهتره که اتصال رو ببندین (علت رو در ادامه توضیح میدم).

حالا دیگه ممکنه از جدول کاربران استفاده نشه ولی صفحه هنوز به این جدول کانکت هست.
به جدول وصل نیستین. به موتور MySQL وصلین (اتصال روی DBMS تعریف میشه نه دیتابیس یا جدول).

آیا این در هنگام بارگزاری صفحه برای هزاران نفر (!) فشار اضافی به سرور وارد نمیکنه؟
بطور کلی MySQL و هر DBMS دیگه، یک تعداد اتصال همزمان مشخص رو پشتیبانی میکنه که توی فایل تنظیماتش (توی MySQL فایل my.ini) مشخص میشه. از اونجا که توی هاست (بخصوص هاست اشتراکی) تعداد این اتصالها و تنظیمات MySQL دست شما نیست، بهتره هر موقع به دیتابیس احتیاجی ندارین، اتصال رو ببندین چون اگه اتصال باز باشه، ممکنه با بالا رفتن بازدیدکنندگان سایتتون، با خطای Too many connections ازطرف MySQL مواجه بشین. البته این نکته موقعی ضروریه که فرضاً شما یک اسکریپت سنگین دارین که کلی کار باید روی داده های استخراج شده از دیتابیس انجام بده. خوب اینجور وقتها بهتره ابتدا اطلاعات رو استخراج کنید و توی یک آرایه معمولی PHP بگذارین و اتصال رو ببندین تا وقتی که برنامه وارد پردازش سنگین خودش میشه، اتصال برای اینکه یکنفر دیگه بخواد اون رو بگیره، آزاد شده باشه. اگه اینکار رو انجام ندین، PHP صبر میکنه تا وقتی که اسکریپتتون تمام شد، همه منابعی که در اختیار گرفته (اعم از فایل، دیتابیس و...) رو آزاد کنه. در مواقعی که اسکریپت شما کوتاهه و کار سنگین و پیچیده ای انجام نمیده و فرضاً زیر یکی دو ثانیه کارش تمام میشه، نیازی نیست نگران بستن اتصال باشین.