النتائج 1 إلى 7 من 7

الموضوع: شرح التعامل مع مكتبة PDO [الجزء الثاني]

  1. #1
    عضو نشيط جدا
    تاريخ التسجيل
    Jan 2008
    المشاركات
    512

    شرح التعامل مع مكتبة PDO [الجزء الثاني]



    بسم الله الرحمن الرحيم


    شرح التعامل مع مكتبة PDO [الجزء الأول]



    يتناول هذا الجزء ما يلي:
    = إرشادات قبل البدء
    = مقدمة
    = ماهية الأخطاء التي من الممكن أن تواجهك
    = مستويات إرسال الخطأ في المكتبة والتحكم فيها
    = كيفية استقبال أخطاء ال SQL والاستفادة منها
    = 7 تطبيقات على ما تم تناوله إلى الآن
    = خاتمة



    = إرشادات قبل البدء:
    * ملحوظة1: هذا الدرس يعتمد بشكل كبير على التجربة وملاحظة النتائج.
    * ملحوظة2: إذا وجدت ثقل في محتوى الشرح.. اقرأ فقط المقدمة ثم توجه للتطبيقات العملية ثم الخاتمة.
    * ملحوظة3: هذا الدرس يعتمد على علم القارئ المسبق بماهية ال error_reporting الخاص ب php ومستوياته PHP: error_reporting - Manual
    * ملحوظة4 نستخدم بنية الجدول الموجود في الجزء الأول من الشرح... ومعلومات قاعدة البيانات على سيرفري الشخصي
    كود:
    host: localhost
    user: root
    pass: 123456
    dbname: test
    = مقدمة: يجب لفت النظر إلى أن استخدام مكتبة مدمجة في الphp مثل pdo يعتبر اخف وأسرع من أي مكتبة يتم استخدامها
    على شكل كود php وهذا على الإطلاق .. لذلك أنصح من لا يستخدمها بأن يفكر في استخدامها مستقبلا.


    = ماهية الأخطاء التي قد تواجهك:
    - أخطاء ترجعها المكتبة مثلا عند فشل الاتصال بقاعدة البيانات.
    - أخطاء الكود المترتبة على الفشل في جلب النتيجة مثلا استخدام foreach لعرض نتائج الاستعلام ب SELECT


    = مستويات إرسال الخطأ في المكتبة والتحكم فيها: هناك 3 مستويات للتحكم في نظام إرجاع الخطأ بالمكتبة:


    -ERRMODE_EXCEPTION: هنا يتم عرض الخطأ حتى إذا كان نظام عرض الأخطاء في php مغلقا... مثال
    كود PHP:
        $SQL = new PDO('mysql:host=localhost;dbname=test','root','123456',array(PDO::ATTR_PERSISTENT=>true));
        echo 
    'Connected to db';
        
    $SQL->setAttribute(PDO::ATTR_ERRMODE,PDO::ERRMODE_EXCEPTION);
        
    $SQL->exec("INSERT INTO article (name,bdy) VALUES ('$name','$body')");
        echo 
    'Query executed successfully'
    تم إدخال اسم الحقل body بشكل خاطئ مما ينتج رسالة خطأ ويوقف تنفيذ الكود الذي يلي موضع الخطأ.
    وهو مفيد جدا لاستعماله أثناء مرحلتي التطوير والتعديل على الكود.



    -ERRMODE_WARNING: هنا يتم إرجاع خطأ من نوع E_WARNING أي انه سيعرض من خلال محرك الخطأ الخاص بال php .. مثال

    كود PHP:
    try{
        
    $SQL = new PDO('mysql:host=localhost;dbname=test','root','123456',array(PDO::ATTR_PERSISTENT=>true));
        echo 
    'Connected to db';
        
    $SQL->setAttribute(PDO::ATTR_ERRMODE,PDO::ERRMODE_WARNING);
        
    $SQL->exec("INSERT INTO article (name,bdy) VALUES ('$name','$body')");
        echo 
    'Query executed successfully';
    }catch(
    PDOException $e){
        echo 
    $e->getMessage();

    تم إدخال اسم الحقل body بشكل خاطئ مما ينتج رسالة خطأ warning مع متابعة تنفيذ الكود . وهنا سيخضع عرض الخطأ
    لإعدادات ال error_reporting .. مفيد في مرحلة التعديل على الكود و مرحلة الاختبار



    -ERRMODE_SILENT: هذا هو الوضع الافتراضي حيث لا يتم عرض أي خطأ وسيتم العمل بصمت
    مع الاستمرار بتنفيذ باقي الكود التالي لمكان حدوث الخطأ ..مثل التعامل مع دوال mysql العادية

    كود PHP:
    try{
        
    $SQL = new PDO('mysql:host=localhost;dbname=test','root','123456',array(PDO::ATTR_PERSISTENT=>true));
        echo 
    'Connected to db';
        
    $SQL->setAttribute(PDO::ATTR_ERRMODE,PDO::ERRMODE_SILENT);
        
    $SQL->exec("INSERT INTO article (name,bdy) VALUES ('$name','$body')");
        echo 
    'Query executed successfully';
    }catch(
    PDOException $e){
        echo 
    $e->getMessage();

    تم إدخال اسم الحقل body بشكل خاطئ ومع ذلك لن يتم طبع أي خطأ وسيستمر تنفيذ الكود وكأن شيئا لم يحدث

    * نلاحظ في الحالات السابقة طباعة سطر في نهاية الكود بمعلومات عن الخطأ وهذا ناتج عن echo $e->getMessage()
    وتختلف طرق التعامل مع الخطأ فمن الممكن أن تعرض رسالة معينة للزائر بناء عليه أو ترسله على الايميل ... أو أي شيء حسب تفضيلك.



    = كيفية استقبال أخطاء ال SQL والاستفادة منها: عندما يحدث خطأ في استعمالنا العادي مثلا ل mysql فإننا نقوم بإظهار الرقم الخاص به
    كود PHP:
    echo mysql_errno($link_identifier); 
    أو طبع رسالة الخطأ كاملة ب
    كود PHP:
    echo mysql_error($link_identifier); 
    أيضا PDO تمكننا من فعل ذلك بكل سهولة: نستعمل دالتي errorCode التي تحمل كود الخطأ أو errorInfo
    التي تحمل مصفوفة ببيانات موسعة عن الخطأ

    كود PHP:
    $result $SQL->query("SELECT name,bdy FROM article WHERE id = 1");
    echo 
    $result->errorCode();
    print_r($result->errorInfo()); 
    كود PHP:
    $SQL->exec("INSERT INTO article (name,bdy) VALUES ('$name','$body')");
    echo 
    $SQL->errorCode();
    print_r($SQL->errorInfo()); 
    = تطبيقات على ما تم تناوله إلى الآن: الغرض منها توصيل المعلومة والتعود على التعامل و لك الحرية في عمل أكواد أكثر فاعلية
    ويفضل وضعها هنا حتى تعم الاستفادة.


    -تحديد وعرض المقالات الموجودة في جدول article

    كود PHP:
    try{
        
    $SQL = new PDO('mysql:host=localhost;dbname=test','root','123456',array(PDO::ATTR_PERSISTENT=>true));
        
    $result $SQL->query('SELECT * FROM article ORDER BY id DESC');
        if(
    $SQL->rowCount() > 0){
            while(
    $row $SQL->fetch(PDO::FETCH_ASSOC)){
                echo 
    '<h2>',$row['name'],'</h2><p>',$row['body'],'</p>';
            }
        }else{
            echo 
    'no articles found';
        }
    }catch(
    PDOException $e){
        echo 
    $e->getMessage();
        
    // you can mail the error message to review your sql errors later
        // you can also add it to a log file to analyze it later

    - طريقة أخرى لتحديد وعرض المقالات من جدول article


    كود PHP:
    try{
        
    $SQL = new PDO('mysql:host=localhost;dbname=test','root','123456',array(PDO::ATTR_PERSISTENT=>true));
        
    $rows $SQL->query('SELECT name, body FROM article WHERE id = 1')->fetchAll();
        
    print_r($rows);
    }catch(
    PDOException $e){
        echo 
    $e->getMessage(),'<br />error code:'.PDO::errorCode();
        
    // you can mail the error message to review your sql errors later
        // you can also add it to a log file to analyze it later

    -تحديد وعرض اسم ومحتوى مقالة واحدة في جدول article

    كود PHP:
    try{
        
    $SQL = new PDO('mysql:host=localhost;dbname=test','root','123456',array(PDO::ATTR_PERSISTENT=>true));
        
    $result $SQL->query('SELECT name, body FROM article WHERE id = 1');
        
    $name $result->fetchColumn(0);
        
    $body $result->fetchColumn(1);
        echo 
    '<h2>',$name,'</h2><p>',$body,'</p>';
    }catch(
    PDOException $e){
        echo 
    $e->getMessage();
        
    // you can mail the error message to review your sql errors later
        // you can also add it to a log file to analyze it later

    - إدخال مقالة جديدة

    كود PHP:
    try{
        
    $SQL = new PDO('mysql:host=localhost;dbname=test','root','123456',array(PDO::ATTR_PERSISTENT=>true));
        
    $count $SQL->exec("INSERT INTO article (name, body) VALUES ($name$body)");
        echo 
    'insert success';
    }catch(
    PDOException $e){
        echo 
    $e->getMessage();
        
    // you can mail the error message to review your sql errors later
        // you can also add it to a log file to analyze it later

    - تعديل مقالة موجودة

    كود PHP:
    try{
        
    $SQL = new PDO('mysql:host=localhost;dbname=test','root','123456',array(PDO::ATTR_PERSISTENT=>true));
        
    $count $SQL->exec("UPDATE article SET name = '$name', body = '$body' WHERE id = 1");
        echo 
    'update success';
    }catch(
    PDOException $e){
        echo 
    $e->getMessage();
        
    // you can mail the error message to review your sql errors later
        // you can also add it to a log file to analyze it later

    - حذف مقالة

    كود PHP:
    try{
        
    $SQL = new PDO('mysql:host=localhost;dbname=test','root','123456',array(PDO::ATTR_PERSISTENT=>true));
        
    $count $SQL->exec("DELETE FROM article WHERE id = 1");
        echo 
    'delete success';
    }catch(
    PDOException $e){
        echo 
    'delete failed';
        echo 
    $e->getMessage();
        
    // you can mail the error message to review your sql errors later
        // you can also add it to a log file to analyze it later

    - حذف مقالة (أو أي عملية أخرى) باستخدام الاتصال المتقطع >> لإغلاق الاتصال فقط غير نوع المتغير الذي يحمل نسخة كائن object المكتبة

    كود PHP:
    try{
        
    $SQL = new PDO('mysql:host=localhost;dbname=test','root','123456');
        
    $count $SQL->exec("DELETE FROM article WHERE id = 1");
        echo 
    'delete success';
        
    $SQL null;
    }catch(
    PDOException $e){
        echo 
    $e->getMessage();
        
    // you can mail the error message to review your sql errors later
        // you can also add it to a log file to analyze it later

    = خاتمة: تم الانتهاء من الجزء الثاني للشرح .. حقيقة في أول الأمر كنت أنوي وضع مدخل مبسط..
    لكن الآن بإذن الله سنبدأ سلسلة شروحات أولهم يتناول هذه المكتبة بجميع أدواتها التي قد يحتاجها المبرمج .
    ثم فتح المجال لطلب أي جزء آخر في PHP ليتم شرحه.

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


    يتبع ،،





    التعديل الأخير تم بواسطة mr_m ; 01-04-2009 الساعة 04:59 PM
    __________________
    محمد حمود.


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


    سلام عليكم

    والله يا اخى جهد مميز
    اشكرك عليه

    لكن انا لم استخدم اى مكتبات قبل كده
    ولم اتعامل فى php
    الا بالبرمجه العاديه

    حاولت انى اطبق فى الجزء الاول
    لكن وجدت صعوبه و حسيت انى تاهيه
    اقصد هنا استخدمه فى برمجه حقيقه
    هل هذا بسب انى لم اتعلم البرمجه الكائنبه او مثل ذلك

    -------
    على العموم
    انا راح اراجع على الدرس مره ثانيه ايضا





    __________________
    مصرى و افتخر


  3. #3
    عضو نشيط جدا
    تاريخ التسجيل
    Jan 2008
    المشاركات
    512


    وعليكم السلام ورحمة الله

    أخي حقيقة لا تختاج خبرة قوية في البرمجة الكائنية للتعامل مع المكتبة..

    فقط راجع الجزء الاول مع تنفيذ الاكواد الموجودة به عمليا .. ثم تنفيذ الامثلة الواردة في هذا الجزء..

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

    ----

    وشكرا للاشراف على تثبيت الموضوع ...





    التعديل الأخير تم بواسطة mr_m ; 02-04-2009 الساعة 05:32 PM
    __________________
    محمد حمود.

  4. #4
    عضو نشيط جدا
    تاريخ التسجيل
    Sep 2006
    المشاركات
    547


    شكرا على طرح هذا الموضوع الهام، أردت فقط إلى الإشارة إلى مثال عملي مستخدم في إحدى برامج الأمثلة على استخدام مكتبة Ar-PHP وتجدونه على الرابط التالي:

    Arabic Query Class





    __________________
    خالد الشمعة - Khaled Al-Shamaa
    PHP and Arabic language

  5. #5
    عضو نشيط جدا
    تاريخ التسجيل
    Jan 2008
    المشاركات
    512


    شكرا على المثال أستاذ خالد .. حقيقة لم أكن قد اطلعت على محتوى المكتبة من قبل نظرا لأني لا يوجد لي احتكاك باللغة العربية في البرمجة.

    لكن بعدما اطلعت عليها الان تأكد ما كنت اقرأه عنها. وهذا شيء طيب

    بالتوفيق





    التعديل الأخير تم بواسطة mr_m ; 09-04-2009 الساعة 07:56 PM سبب آخر: خطأ :D
    __________________
    محمد حمود.

  6. #6
    عضو نشيط جدا
    تاريخ التسجيل
    Sep 2006
    المشاركات
    547


    على الرحب والسعة، وأرجو أن أكون أهلا لهذا الإطراء






  7. #7
    عضو فعال جدا
    تاريخ التسجيل
    Mar 2008
    المشاركات
    2,485


    راح اقرا الدرس جيدا واذا فيه استفسار سوف اعود لكلا شكرا لك










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

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

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