مشاهدة نتائج الإستطلاع: تنفيذ الاتصال بالداتابيز باول الصفحة ام مع كل استعلام

المصوتون
10. أنت لم تصوت في هذا الإستطلاع
  • في بداية الصفحة و بنهايتها ,, الاغلاق

    7 70.00%
  • مع كل استعلام ,, اتصل و اغلاق

    1 10.00%
  • الطريقتين صحيحتين ,, حسب الموقع

    2 20.00%
النتائج 1 إلى 14 من 14

الموضوع: نقاش بسيط ,, بخصوص الاتصال بالداتابيز

  1. #1

    نقاش بسيط ,, بخصوص الاتصال بالداتابيز



    السلام عليكم

    صراحة اود ان اطرح سؤال على اعضاء سوالف المتميزين ,, و اعتقد ان الجميع يملك اجابة و لكن نريد ان نصل الى اجابة صحيحة 100%


    الان الكل يعرف ان عند عمل صفحة مثلا عرض خبر او ارشيف اخبار بموقع معين


    نقوم اول شيء بعمل اتصال بالداتا بيز و من ثم تنفيذ الكود كاملا ,,, ومن ثم نقوم باغلاق الاتصال بالداتابيز



    السؤال هنا ,, ايهما اصح ,, ان نعمل اول شيء اتصال بالداتابيز و من ثم تنفيذ الكود و بعدها اغلاق الاتصال

    ام ان بكل عملية استعلام من الداتابيز نعمل عملية اتصال و بعدها استعلام و بعدها اغلاق للاتصال


    طرحت السؤال ,, لانه دار بيني و بين صديق لي مبرمج حوار ,, حيث هو يستخدم الطريقة الثانية و يقول لي انها هي الصحيحة

    و انا عادة استعمل الطريقة الاولى و هي انشاء اتصال و بعدها تنفيد الاستعلامات و بعدها اغلاق الاتصال مثلا كوضع الاغلاق بالفوتر او مثل هذا الكلام



    ام الطريقتين صح ,, حسب نوع الموقع ,,



    ما رايكم ,, شكرا لكم و اسف على الاطالة ,,





    التعديل الأخير تم بواسطة محمد1004 ; 17-05-2011 الساعة 02:33 PM
    __________________
    www.mojo.ps


  2. #2
    عضو جديد
    تاريخ التسجيل
    Apr 2010
    المشاركات
    7


    اخي الكريم

    يبدوا وان كلام صديقك خاطئ 100 %

    لايجوز اغلاق الاتصال باي طريقة كانت دام في اسفله استعلامات اخرى

    كالتالي

    كود PHP:
    <?php

    $con 
    mysql_connect(); // fast example
    $sel mysql_select_db(); // fast example

    $q mysql_query('SQL Commands');
    $r mysql_fetch_assoc($q);
    mysql_close($con);


    $q2 mysql_query('SQL Commands');
    $r2 mysql_fetch_assoc($q2);
    mysql_close($con);

    /**
     * this is wrong in php
     */

    ?>
    بينما التحرير والكاش يمكنك لكن اغلاق الاتصال فقط يستدعى مرة واحدة في الصفحة سواء كان على كلامك ملف يطلب اخر الصفحة كالفوتر او اخر الصفحة ولايجوز نهائياً اغلاق كل اتصال هذا يؤدي الى عدم عمل السكربت

    او يمكنك استخدام pconnect

    ولا اعلم ماقصد صديقك باغلاق الاتصال بعد كل استعلام ؟؟ كيف تتم هذي

    لربما قصده التحرير free_result

    وليس الاغلاق فهذا عن ذاك يختلف

    والصحيح

    كود PHP:
    <?php

    $con 
    mysql_connect(); // fast example
    $sel mysql_select_db(); // fast example

    $q mysql_query('SQL Commands');
    $r mysql_fetch_assoc($q);


    $q2 mysql_query('SQL Commands');
    $r2 mysql_fetch_assoc($q2);

    mysql_close($con);
    ?>
    بينما التحرير لابأس من استخدام في الاسفل او تحت الاستعلام

    كود PHP:
    <?php

    $con 
    mysql_connect(); // fast example
    $sel mysql_select_db(); // fast example

    $q mysql_query('SQL Commands');
    $r mysql_fetch_assoc($q);
    mysql_free_result($q);

    $q2 mysql_query('SQL Commands');
    $r2 mysql_fetch_assoc($q2);
    mysql_free_result($q2);

    mysql_close($con);
    ?>






    التعديل الأخير تم بواسطة cliprz ; 17-05-2011 الساعة 06:48 PM
    __________________
    الحمدالله

  3. #3


    اشكر مرورك ,,


    الذي يقصده صديقي هو التالي ,,

    انه يقوم بكل عملية استعلام ,, بنفس الدالة ,, يقوم بالاتصال بالداتابيز

    و بعد الانتهاء من الاستعلام يغلق الاتصال

    يعني شرح عملي ,, عنده مثال دالة الاستعلام ,, يبدا الدالة بكود الاتصال بالداتابيز

    و بعدها الاستعلام و بنهاية الدالة ,, يقوم باغلاق الاتصال ,,, و لو اراد الاستعلام مرة اخرى بالصفحة يعني ,, يمكن ذلك لان الدالة نفسها تقوم بالاتصال بالداتابيز


    و ليس كما قلت انت ,, انو راح تكون الاتصال مغلق

    لا ممكن يستعلم لانه اصلا بيعمل اتصال ,, لكن هل الطريقة هذي صحيحة ام خطا,, لانه كل مرة تريد الاستعلام يقوم بالاتصال و الاغلاق


    ما رايكم ,, شكرا لكم





    __________________
    www.mojo.ps

  4. #4


    معقول !! ما في خبرات في سوالف





    __________________
    www.mojo.ps

  5. #5
    عضو فعال جدا
    تاريخ التسجيل
    Apr 2002
    المشاركات
    2,046


    الاتصال بدالة mysql_connect لا يحتاج لاغلاق الاتصال مرة أخرى، بمعنى أنه ليس ضروري حيث ان الكود يقوم باغلاق الاتصال تلقائياً حين انهاء تنفيذ السكريبت، عن نفسي اتبع هذه الطريقة

    في نفس الوقت يوجد آراء أخرى تفضل استخدام طريقة صديقك، حيث يتم اغلاق الاتصال بمجرد الانتهاء من الاستعلام لتوفير الموارد دون الانتظار حتى نهاية السكريبت، وهذه الطريقة مفيدة في حالة المواقع التي يوجد عليها عدد زوار ضخم أو هائل

    في النهاية يمكنك التجربة ومعرفة أي الطرق أفضل وأنسب لك





    __________________
    مدونتي

  6. #6


    الإتصال بحد ذاته يعتبر من أكثر الإستعلامات إستهلاكا للموارد !






  7. #7
    عضو نشيط
    تاريخ التسجيل
    Aug 2007
    المشاركات
    44


    إذا كنت تقصد فتح الإتصال ثم إغلاقه في نفس طلب الصفحة الواحدة أكثر من مرة فلا أظن أن هذا صحيح ..

    أما إذا كنت تقصد إغلاق الإتصال في نهاية السكربت .. فهذا هو الصحيح .. ولو أن دالة غلق الإتصال اصبحت تنفذ تلقائيا..


    والدليل على ذلك هو وجود دالة الإتصال المستمر في Mysql 4 حتى لا يتم إستهلاك موارد السيرفر من عملية فتح الإتصال وغلقه أكثر من مرة .. ولكن أظن أنها غير مدعومة الآن بسبب إستهلاكها لموارد السيرفر في حال كثرة الزيارات .

    المهم فتح الإتصال وإغلاقه أكثر من مرة في طلب واحد ليس عمليا .. والله أعلم






  8. #8


    جيد جدا


    مزيد من الردود المدروسة ,, شكرا لكم





    __________________
    www.mojo.ps

  9. #9
    عضو فعال
    تاريخ التسجيل
    Feb 2008
    المشاركات
    1,589


    لا اعلم كيف تقوموا بالبرمجة في php ليس لدي خبره فيها
    لكن سأتكلم من وجهة نظري في jsp الخاصة ب java

    اقول بعمل كلاس اسمه اعمال قاعدة البيانات
    يكون فيه كل العمليات مثل
    open
    close
    select
    update
    ........ الخ

    وفي فيه كلاس اخر لاستخدام الميثود المجوده في كلاس قاعدة البيانات
    مثلا في الكلاس الجديد فيه مثود اسمه add
    add في الاد اقوم باستدعاء كل من open و insert وابعت البراميترز وهي تقول بالباقي
    فانا لا افتح الكنكشن
    ولكن الدالة هي من تقوم بهذا
    وفي نهايتها تغلقها اوتوماتيك


    لا اعلم وصلت الفكرة ام لا






  10. #10
    عضو نشيط
    تاريخ التسجيل
    Aug 2007
    المشاركات
    44


    لا اعلم كيف تقوموا بالبرمجة في php ليس لدي خبره فيها
    لكن سأتكلم من وجهة نظري في jsp الخاصة ب java

    اقول بعمل كلاس اسمه اعمال قاعدة البيانات
    يكون فيه كل العمليات مثل
    open
    close
    select
    update
    ........ الخ

    وفي فيه كلاس اخر لاستخدام الميثود المجوده في كلاس قاعدة البيانات
    مثلا في الكلاس الجديد فيه مثود اسمه add
    add في الاد اقوم باستدعاء كل من open و insert وابعت البراميترز وهي تقول بالباقي
    فانا لا افتح الكنكشن
    ولكن الدالة هي من تقوم بهذا
    وفي نهايتها تغلقها اوتوماتيك


    لا اعلم وصلت الفكرة ام لا

    طيب في حالة لو عندك عملية إستعلام ( get ) وعملية إضافة ( add ) على جدول وعملية تحديث على جدول ( edit ) وعملية إضافة على جدول آخر ( add )..


    في هذه الحالة راح يكون العمل بهذي الطريقة :-

    get - open - select - close
    add - open - insert - close
    edit - open - update - close
    add - open - insert - close

    أما لو تم فتح الكونكشن من بداية السكربت راح تكون العملية كالتالي :-

    open
    get - select
    add - insert
    edit - update
    add - insert
    close



    هذا تبسيط للفكرة اللي راح يعمل فيها البرنامج ..






  11. #11
    عضو نشيط جدا
    تاريخ التسجيل
    Aug 2008
    المشاركات
    324


    إستعمل كلاس الإتصال بقواعد البيانات وانتهينا من حكان الراس

    مثال بسيط
    http://forum.montadaphp.net/t2234/






  12. #12
    عضو فعال
    تاريخ التسجيل
    Feb 2008
    المشاركات
    1,589


    لا اعلم كيف تقوموا بالبرمجة في php ليس لدي خبره فيها
    لكن سأتكلم من وجهة نظري في jsp الخاصة ب java

    اقول بعمل كلاس اسمه اعمال قاعدة البيانات
    يكون فيه كل العمليات مثل
    open
    close
    select
    update
    ........ الخ

    مثلا في ميثود بتاع select
    اقول في فتح الكنكشن

    وفي فيه كلاس اخر لاستخدام الميثود المجوده في كلاس قاعدة البيانات
    مثلا في الكلاس الجديد فيه مثود اسمه search
    اقوم في السيرش باستخدام الدالة select والي هي بدورها بتفتح الكنكشن وبتقفله

    فانا لا افتح الكنكشن
    ولكن الدالة هي من تقوم بهذا
    وفي نهايتها تغلقها اوتوماتيك


    لا اعلم وصلت الفكرة ام لا



    ...............
    تم تعديل الرد






  13. #13
    عضو فعال
    تاريخ التسجيل
    Jun 2008
    المشاركات
    1,600


    طريقة فتح واغلاق الاتصال كل مرة غير عملية بالمرة
    وذلك لأن عملية الاتصال بحد ذاتها مكلفة ، كذلك الامر بالنسبة للامر curl_init مثلا ً
    مثلا مرة وضعت الامر curl_init داخل حلقة تكرار لسحب محتويات موقع(للتجربة فقط)
    لاحظت بطئ في الأداء، عندها قررت وضع هذه الدالة خارج الحلقة وتغيير المتغيرات كل مرة
    بدون التعريف من جديد، النتيجة كانت تسريع العملية بنسبة 200-300%

    في حالة الجافا لا داعي للقلق كثيرًا اذ انها تحوي خاصية connection pools
    هذه الخاصية توجد في ال php لكن تسبب مشاكل(الدالة pconnect)






  14. #14
    عضو فعال
    تاريخ التسجيل
    Feb 2008
    المشاركات
    1,589


    ahmad sadiq


    مثلا مرة وضعت الامر curl_init داخل حلقة تكرار لسحب محتويات موقع(للتجربة فقط)
    متذكر موضوع مشابه
    عندما تم عمل باند لك
    متذكر موضوع نسخة سوالف ^_^
    هل هذا صحيح
    وهذا اخرت php










ضوابط المشاركة

  • لا تستطيع إضافة مواضيع جديدة
  • لا تستطيع الرد على المواضيع
  • لا تستطيع إرفاق ملفات
  • لا تستطيع تعديل مشاركاتك
  •  

أضف موقعك هنا| اخبار السيارات | حراج | شقق للايجار في الكويت | بيوت للبيع في الكويت | دليل الكويت العقاري | مقروء | شركة كشف تسربات المياه | شركة عزل اسطح بالرياض | عزل فوم بالرياض| عزل اسطح بالرياض | كشف تسربات المياة بالرياض | شركة عزل اسطح بالرياض