View Full Version : try/cacth در هنگام اتصال به دیتابیس
sara.ghavam
دوشنبه 04 بهمن 1395, 09:47 صبح
سلام دوستان
من در هنگام اتصال به دیتابیس گاهی دچار مشکل میشم که سرور پیام خطا میده البته فقط گاهی مثلا میگه که DLL مربوط به SQLSRV رو نمیتونه لود کنه که بعد دوباره که رفرش میکنم مشکل حل میشه
من خیلی جستجو کردم اما به نتیجه نرسیدم و فکر کنم باید در سرور تغییراتی انجام بشه که امکانش نیست
در حال حاضر به این نتیجه رسیدم که یک Try/catch بذارم برای اتصال به دیتابیس که اگر مشکلی پیش اومد یک پیام بده و خودش مجدد صفحه رو بعد از مثلا 15 ثانیه رفرش کنه
من از موارد زیر استفاده می کنم
Windows Server 2012 R2
IIS 8.5
codeigniter 3.1
SQL Server 2014
ermya_
سه شنبه 05 بهمن 1395, 22:27 عصر
دوست من اولا که ویندوز کلا برای کاربر های عادی نوشته شده و ورژن سرورش هم فقط برای کار های کوچیک هست
بکار بردن php روی سیستم عامل ویندوز و اونم کنار IIS فقط واسه کارای تحقیقاتی هست و این جور مساعل طبیعی هست
یکی از مشکلات php اینه که کانکشن دیتا بیس رو باز نگه نمیداره و میزنه و قطع میکنه ! و حالا تمام دیتابیس های SQL Base هم توی maximum connection per seccond ضعف دارن
شما زمانی که تعداد کانکشن های همزمانت از حدمجاز بیشتر بشه یا SQL میپکه و یا درایورت که اینجا همون DLL هست می پکه و نمیتونه این حجم رو هندل کنه
بهترین راه همون try catch هست
ولی من شدیداً توصیه میکنم از لحاظ مساعل امنیتی به هیچ وجه از ویندوز برای پروژه های تجاری استفاده نکنید و همچنین از لینوکس ها با کرنل debian
برای کار تجاری امن ترین و استیبل ترین OS سیستم عامل های مبتنی بر کرنل redhat هست نظیر centos
sara.ghavam
چهارشنبه 06 بهمن 1395, 07:23 صبح
دوست من اولا که ویندوز کلا برای کاربر های عادی نوشته شده و ورژن سرورش هم فقط برای کار های کوچیک هست
بکار بردن php روی سیستم عامل ویندوز و اونم کنار IIS فقط واسه کارای تحقیقاتی هست و این جور مساعل طبیعی هست
یکی از مشکلات php اینه که کانکشن دیتا بیس رو باز نگه نمیداره و میزنه و قطع میکنه ! و حالا تمام دیتابیس های SQL Base هم توی maximum connection per seccond ضعف دارن
شما زمانی که تعداد کانکشن های همزمانت از حدمجاز بیشتر بشه یا SQL میپکه و یا درایورت که اینجا همون DLL هست می پکه و نمیتونه این حجم رو هندل کنه
بهترین راه همون try catch هست
ولی من شدیداً توصیه میکنم از لحاظ مساعل امنیتی به هیچ وجه از ویندوز برای پروژه های تجاری استفاده نکنید و همچنین از لینوکس ها با کرنل debian
برای کار تجاری امن ترین و استیبل ترین OS سیستم عامل های مبتنی بر کرنل redhat هست نظیر centos
سلام دوست گلم/ ممنون که پاسخ دادی
اینکه میفرمایید ویندوز سرور برای کارهای عادی و کوچیک هست رو من متوجه نمیشم
و اینکه میگید PHP روی ویندوز خوب کار نمیکنه میدونم، اما شرایط جوری هست که دست من نیست و باید از این سرور و با ید از SQL Server استفاده کنم، این یک وب سایت داخلی هستش که نهایتا 10 نفر باهاش کار میکنند/ پس قضیه لینوکس و mysql و ... به کلی منتفی میشه
و اینکه فرمودید بهترین راه Try catch هست خب درسته اما چطوری توی codeigniter اجراش کنم چون که من به صورت auto load به دیتابیس وصل میشم
ermya_
چهارشنبه 06 بهمن 1395, 13:27 عصر
> اینکه میفرمایید ویندوز سرور برای کارهای عادی و کوچیک هست رو من متوجه نمیشم
دلایل زیادی وجود داره برای این موضوع دلایل فنی دلایل امنیتی دلایل stability and reactivity در هر حال گفتگو راجع به این مسعله از حوصله ی این تاپیک خارج هست
اگه شما دوست دارید از تجربیات دیگران استفاده کنید راجع به صحت این موضوع تحقیق کنید و اگر هم فکر میکنید که به اندازه کافی راجع به این مسعله تجربه دارید خوب این عرض بنده رو نادیده بگیرید
3 راه برای اینکار وجود داره
از اونجا که codeigniter سخت گیر نیست میتونید به صورت دستی در model به دیتا بیس وصل بشید
راه حل بعدی اینه که به این صورت داخل model ار try catch استفاده کنید و exeption رو بریزید دور
try {
$query_str = "SELECT * FROM tbl_user WHERE username = '".$username."'";
$result = $this->db->query($query_str);
if (!$result)
{
throw new Exception('error in query');
return false;
}
return $result;
} catch (Exception $e) {
return;
}
و راه حل آخر اینکه کلاس databse اصلی codeigniter رو متناسب با نیاز edit کنید که توصیه نمیشه
بهترین راه همون راه دوم هست
sara.ghavam
چهارشنبه 06 بهمن 1395, 16:53 عصر
تشکر دوست عزیزم
یک سوال دیگه هم داشتم اینکه
اگر من بخوام که اگر مثلا یک خطا رخ داد یک دستوری اجرا بشه یا مثلا وقتی که خطای دیتابیس رخ داد مثلا بعد از چند ثانیه صفحه دوباره رفرش بشه این دستورات رو تو بخش catch باید بنویسم؟ یا؟؟؟؟؟
ermya_
پنج شنبه 07 بهمن 1395, 18:05 عصر
سلام
زمانی که exception رخ میده برنامه میپره به قسمت catch
و اون متغیر $e حاوی پیغام خطای رخ داده هست شما میتونین با var_dump در حالت های مختلف بررسیش کنید و در زمان مناسب کار مورد نظر رو انجام بدید
vBulletin® v4.2.5, Copyright ©2000-1404, Jelsoft Enterprises Ltd.