برمجة الأندرويد

كلاس Marei DB للتعامل مع قواعد بيانات MySQL بسهولة

[stextbox id=”info” mode=”css” direction=”rtl”] اليوم من المفترض ان نتابع سلسة GCM بالعربية لكن للاسف توقف التابلت الخاص بى  وأحتاج موبايل حقيقى لتجربة الكود اثناء كتابة التدوينة لان النوتيفيكشن يعمل فى ظل وجود جوجل بلاى سيرفس مفعلة وتعمل بشكل صحيح  لذلك سنأجلها للمرة القادمة حتى اكون اصلحت المشكلة او احضرت جهاز جديد[/stextbox] [stextbox id=”alert” caption=”ملحوظة” collapsing=”true” mode=”css” direction=”rtl” shadow=”false”]نفترض فى هذه التدوينة أنه لديك معرفة عامة بأساسيات الـ php وأساسيات الويب سيرفس فى الاندرويد اذا لم يكن لديك معرفه بهذه الاساسيات  قم بمراجعة سلسلة ِAndroid Webservices بالعربية  [/stextbox]

 

Marei DB

هى  عبارة عن كلاس php بسيط قام ببرمجته صديقنا ” مرعى ”  يسهل عليك إجراء العمليات المختلفة (حذف واجراء وتحديث وتحديد وجلب النتائج ) على الـ online Database وتحديدا الـ MySQL  فبدلا من أن تقوم بالطريقة العادية التى قمنا باستخدامها فى دروسنا فى شرح سلسلة ِAndroid Webservices بالعربية  حيث كنا نقوم بذلك بطريقة بدائية جدا فى الـ php لكن مع كلاس Marei DB ستقوم بعمل الـ Queries بكل احترافية وبسطور كود مختصرة وقصيرة جدا .

 

المميزات :

تتمتع هذه الكلاس بحماية عالية وتستخدم الـ PDO وتوفر لك مستوى عالى من الامان عند استخدامك لها مقارنة بالطريقة العادية التى ستكون عرضه للاختراق بسهولة عن طريق الـ SQL Injection لكن مع هذه الكلاس فلا تقلق ابدا  .

 

الان قم بتحميل الـ Class من هنا  او نسخ محتواه فى ملف وقم بتسميته باسم DB.php او اى اسم تحبه .

 

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

 

<?php
class DB
{
    // connecting to database
    const HOST = 'mysql.hostinger.ae';
    const USER = 'u260796562_karim';
    const PASSWORD = '123123';
    const DB = 'u260796562_db';
    //

 

ثم قم بحفظ الكلاس ورفعها للسيرفر واصبحت جاهزة للاستخدام مع اى ملف php سننشئه فى الأمثلة التالية :

 

لاستخدام الكلاس مع اى ملف php يجب عليك تضمينها عن طريق عمل include ثم إنشاء اوبجكت منها كالتالى حيث قمت بإنشاء ملف php اسمه getposts لجلب البوستات

والا ساقوم بعمل include للكلاس وعمل اوبجكت كالتالى :

 

<?php
include 'DB.php';
$db = DB::getInstance();

 

 

التحديد SELECT

سوف اقوم بتحديد كل المواضيع كالتالى

<?php
include 'DB.php';
$db = DB::getInstance();
$posts = $db->table('posts')->get();
echo json_encode($posts);

والان انتهينا يمكنك رفع الملف وفتحه من المتصفح

 

اليس رائعا ؟ فى السابق كان عليك ان تكتب حوالى 12 او 14 سطرا لتحصل على نفس الناتج والان باستخدام هذا الكلاس ومن خلال سطرين فقط قمت بالحصول على الناتج .

 

تحديد أعمدة معينة

احيانا تحتاج تحديد اشياء معينة مثلا تريد فى الكود السابق تحديد الـ postcontent فقط سوف نقوم باستخدام الميثود select التى توفرها لنا الكلاس ونعطيها اسم العمود او اسماء الاعمدة التى نريدها  ونفصل بينهم بفاصلة ,  .

<?php
include 'DB.php';
$db = DB::getInstance();
$posts = $db->table('posts')->select('post_content')->get();
echo json_encode($posts);

ويكون الناتج كالتالى

تم تحديد عمود post_content فقط ولم يعرض كل الاعمدة .

 

الادخال INSERT

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

 

<?php
include 'DB.php';
$db = DB::getInstance();
$posts = $db->insert('posts',[
    'post_content'=>'Hello world post from Marei DB',
    'post_writer'=>'Hendi'
]);

قمت بحفظ الكود السابق فى ملف واعطيته اسمه insertpost.php  ثم استدعيته فى المتصفح ثم تفقدت قاعدة البيانات فوجدت انه تم اضافة البوست فى قاعدة البيانات

 

طبعا فى الاستخدام الفعلى فى تطبيقك وقت الـ Insert ستستخدم $_POST او $_GET بدلا من ان تضعها مباشرة اى بدلا من Hello World post from Maret DB لترسله كل مرة الى الملف لعمل ادخال بالبيانات التى ارسلتها .

 

التحديث UPDATE

توفر لنا كلاس Marei DB ميثود update وتأخذ ثلاث باراميترات الاول هو اسم الجدول والباراميتر الثانى هو عباره عن مصفوفة php تحتوى على القيم الجديدة التى ستحدث والبارميتر الثالث يحتوى على الـ  id الخاص بالصف الذى سيتم تحديثه

مثال :

<?php
include 'DB.php';
$db = DB::getInstance();
$posts = $db->update(
    'posts', ['post_content' => 'You must be happy '], 1
);

فى البارامتر الاول اعطيناه اسم الجدول posts

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

البارميتر الثالث اعطيناه الـ id واعطيناه رقم 1 بمعنى حدث البوست رقم واحد فى جدول posts

نقوم بحفظ الكود السابق بملف ورفعه واستدعائه فى المتصفح وستجد النتيجة بأنه تم تغيير محتوى المنشور الى الذى كتبناه

 

 

الحذف DELETE

يمكنك الحذف باستخدام الميثود delete بدلالة الـ id  يعنى احذف العضو الذى id الخاص به = كذا او بدلالة اى عمود اخر تحبه مثلا عندما يكون اسم العضو = كذا ..

مثال بدلالة الـ id

<?php
include 'DB.php';
$db = DB::getInstance();
$result = $db->delete('posts',1);
if ($result)
    echo 1;
else
    echo 0;

فى البارامتير الاول اسم الجدول والباراميتر الثانى هو الـ id  واذا تفقدنا الجدول الان فسنجد ان الـ post الذى الـ id  الخاص به 1 قد حذف

 

وقمنا بعمل if else لنتفقد هل تمت العملية بنجاح ام لا هى ليست جزء من كود الحذف .

 

مثال بدلالة قيمة عمود معين

<?php
include 'DB.php';
$db = DB::getInstance();
$result = $db->delete('posts',['post_writer','Hendi']);
if ($result)
    echo 1;
else
    echo 0;

حيث يقوم هذا الكود بحذف كل المواضيع التى كتبت بواسطة Hendi .

 

طبعا فى الاستخدام العملى ستقوم بعمل $_POST او GET وتمرير الـ id  او القيمة للملف لكى تناديه وترسل له القيمة من الاندرويد لكن يفضل استخدام isset حتى لو حدث خطأ ولم يصل الباراميتر بشكل صحيح فان محتويات الجدول بالكامل يتم حذفها

 

 

 

يمكنك ايضا الحذف باستخدام حالة او شرط معين مثلا احذف كل الاعضاء من جدول المستخدمين عندما يكون عمر المستخدم اقل من 18

$db->delete('users', ['age', '<', 18]);

 

توفر كلاس مرعى DB  لنا ايضا استخدام where بشكل منفصل عن الباراميترز كما فى المثال التالى .

$db->update('users',
    [
        'first_name' => 'Muhammad',
        'last_name' => 'Mustafa',
        'age'   => 21
    ])->where('age','<=',20)->orWhere(1)->exec();

وهذا الكود يحدث بيانات المستخدمين ويجعل الاسم الاول محمد والاخير مصطفى والسن 21 عندما يكون عمر اى شخص فى الجدول اقل من او = 20 او الـ id  = 1 وهذا مجرد مثال توضيحى فقط .

 

 

الـ Pagination

وهذا جزئى المفضل فى هذه الكلاس حيث توفر لنا امكانية تنفيذ الـ pagination بسهولة  تخيل ان لديك تطبيق يشبه الفيس بوك وتعرض الـ feeds للمستخدم بالتأكيد لن تجلب كل الـ posts دفعة واحده وتعرضهم للمستخدم مرة واحده  تريد مثلا عرض 20 موضوع ثم عندما يقوم اليوزر بعمل scroll ويقترب من النهاية تقوم بتحميل 20 بوست اخرين وهكذا كلما قام اليوزر بعمل سكرول تقوم بتحميل المزيد والمزيد وهذا يتطلب خاصية الـ pagintation من جهة الـ php وما يعرف بالـ infinity scroll او endless scroll فى الأندرويد وسيكون فى تدوينة منفصلة ان شاء الله نشرحه من جهة الـ php باستخدام هذه الكلاس ومن جهة الاندرويد فى ريسكلر فيو وبعد انتهاء التدوينة سأضع الرابط فى هذا الموضوع هنا ان شاء الله .

 

سيتم تحديث هذا الموضوع باستمرار مع تحديثات الكلاس واذا كان لديك أى اقتراح يجعل التعامل مع ماى سيكوال اسهل  قم باضافته هنا فى تعليق .

 

السابق
GCM بالـعربية – الدرس الأول
التالي
GCM بالـعربية – الدرس الثانى

9 تعليقات

أضف تعليقا

  1. Ahmed Ali قال:

    حلو الكلاس دا
    بمناسبة ال GCM ممكن تضيف ال google play services علي genymotion
    انا عامل كدا وشغال معايا زي الفل 🙂

    1. Hendiware قال:

      مرحبا أحمد ،
      لدى بالفعل play service مثبته على جنى موشن ورغم ان الـ maps تعمل بشكل جيد الا ان بها بعض المشاكل وتتوقف احيانا ايضا .

  2. شريف قال:

    يا ريت إضافة دوال JOIN للكلاس راح يكون كويس كثير 🙂

  3. جميل الكلاس ما شاء الله وبسيط
    استمر

  4. Abuhassan قال:

    حاولت تطبيق الدرس لكن دون جدوى …. هل هناك تغييرات لو تم رفع ملف الكلاس db ,والملف في المجلد الرئيس لدومين فرعي مثلا؟

    الكلاس مكرر فيه خانات ادخال معلومات قاعدة البيانات..

  5. anas قال:

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

  6. anas قال:

    {“0”:{“ID”:”1″,”Email”:”anss.ajlony1995@gmail.com”,”Password”:”anss123456″,”Full_Name”:”anas maher mohamed ajlouni”,”Gender”:”1″,”Birth_Date”:”2016-09-21″,”Img”:”dlskfa”,”Type”:”1″,”Company_id”:”1″},”1″:{“ID”:”2″,”Email”:”ali@gmail.com”,”Password”:”ali123″,”Full_Name”:”ali tahboub”,”Gender”:”1″,”Birth_Date”:”2016-09-07″,”Img”:”dsf”,”Type”:”2″,”Company_id”:”1″}}

  7. Tester قال:

    كيف يمكن استخدام الكلاس DB.php
    بحيث استفيد من الاسبقية في الأقواس ؟
    مثلا كيف يمكن كتابة الشرط التالي:
    where ( Col1= ‘val1’ or Col2= ‘val2’) and Col3= ‘val3’

    يعني المطلوب الاسطر التي تحقق الشرطين التاليين:

    إما قيمة العمود الأول تساوي قيمة معينة مع قيمة العمود الثالث تساوي قيمة معينة
    أو
    قيمة العمود الثاني تساوي قيمة معينة مع قيمة العمود الثالث تساوي قيمة معينة

  8. sary قال:

    بحاول استعملها بيظهرلي الخطأ ده

    Parse error: syntax error, unexpected ‘list’ (T_LIST), expecting identifier (T_STRING) in /home/u489986511/public_html/DB.php on line 800

اترك تعليقاً

هذا الموقع يستخدم Akismet للحدّ من التعليقات المزعجة والغير مرغوبة. تعرّف على كيفية معالجة بيانات تعليقك.