try/cacth در هنگام اتصال به دیتابیس
سلام دوستان
من در هنگام اتصال به دیتابیس گاهی دچار مشکل میشم که سرور پیام خطا میده البته فقط گاهی مثلا میگه که DLL مربوط به SQLSRV رو نمیتونه لود کنه که بعد دوباره که رفرش میکنم مشکل حل میشه
من خیلی جستجو کردم اما به نتیجه نرسیدم و فکر کنم باید در سرور تغییراتی انجام بشه که امکانش نیست
در حال حاضر به این نتیجه رسیدم که یک Try/catch بذارم برای اتصال به دیتابیس که اگر مشکلی پیش اومد یک پیام بده و خودش مجدد صفحه رو بعد از مثلا 15 ثانیه رفرش کنه
من از موارد زیر استفاده می کنم
Windows Server 2012 R2
IIS 8.5
codeigniter 3.1
SQL Server 2014
نقل قول: try/cacth در هنگام اتصال به دیتابیس
دوست من اولا که ویندوز کلا برای کاربر های عادی نوشته شده و ورژن سرورش هم فقط برای کار های کوچیک هست
بکار بردن php روی سیستم عامل ویندوز و اونم کنار IIS فقط واسه کارای تحقیقاتی هست و این جور مساعل طبیعی هست
یکی از مشکلات php اینه که کانکشن دیتا بیس رو باز نگه نمیداره و میزنه و قطع میکنه ! و حالا تمام دیتابیس های SQL Base هم توی maximum connection per seccond ضعف دارن
شما زمانی که تعداد کانکشن های همزمانت از حدمجاز بیشتر بشه یا SQL میپکه و یا درایورت که اینجا همون DLL هست می پکه و نمیتونه این حجم رو هندل کنه
بهترین راه همون try catch هست
ولی من شدیداً توصیه میکنم از لحاظ مساعل امنیتی به هیچ وجه از ویندوز برای پروژه های تجاری استفاده نکنید و همچنین از لینوکس ها با کرنل debian
برای کار تجاری امن ترین و استیبل ترین OS سیستم عامل های مبتنی بر کرنل redhat هست نظیر centos
نقل قول: try/cacth در هنگام اتصال به دیتابیس
نقل قول:
نوشته شده توسط
ermya_
دوست من اولا که ویندوز کلا برای کاربر های عادی نوشته شده و ورژن سرورش هم فقط برای کار های کوچیک هست
بکار بردن 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 به دیتابیس وصل میشم
نقل قول: try/cacth در هنگام اتصال به دیتابیس
> اینکه میفرمایید ویندوز سرور برای کارهای عادی و کوچیک هست رو من متوجه نمیشم
دلایل زیادی وجود داره برای این موضوع دلایل فنی دلایل امنیتی دلایل 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 کنید که توصیه نمیشه
بهترین راه همون راه دوم هست
نقل قول: try/cacth در هنگام اتصال به دیتابیس
تشکر دوست عزیزم
یک سوال دیگه هم داشتم اینکه
اگر من بخوام که اگر مثلا یک خطا رخ داد یک دستوری اجرا بشه یا مثلا وقتی که خطای دیتابیس رخ داد مثلا بعد از چند ثانیه صفحه دوباره رفرش بشه این دستورات رو تو بخش catch باید بنویسم؟ یا؟؟؟؟؟
نقل قول: try/cacth در هنگام اتصال به دیتابیس
سلام
زمانی که exception رخ میده برنامه میپره به قسمت catch
و اون متغیر $e حاوی پیغام خطای رخ داده هست شما میتونین با var_dump در حالت های مختلف بررسیش کنید و در زمان مناسب کار مورد نظر رو انجام بدید