السلام عليكم ورحمة الله وبركاته
إكمالاً : لما تقدم شرحة من إنشاء فئة للإتصال بقاعدة البيانات على الرابط التالي
سنكمل في هذا اليوم فئات التعامل مع قواعد البيانات
هب أنك تريد إنشاء فئة خاصة بك لإجراء الإستعلامات بسهولة ودقة أكثر وتجنباً للأخطاء كإدخال قيم فارغة وخلافه لقاعدة البيانات
- سنقوم بإنشاء فئة جديدة باسم myTable ترث فئة الإتصال mySQL التي قمنا بإنشائها سابقا في الرابط أعلاه
- حيث أن قاعدة البيانات تحتوي على عده جداول فإننا سنحتاج إنشاء عدة كائنات من هذه الفئة وبالتالي فلن نطبق النمط المفرد بالطريقة السابقة ولكن سنقوم بعمل مصفوفة لحفظ الكائنات المنشأه بها وعدم إنشاء كائن أخر بنفس اسم الجدول في قاعدة البيانات .
- سنعرف متغير خاص داخل الفئة باسم $tableName لحفظ اسم الجدول به .
- سنعرف مصفوفة خاصة لحفظ الكائنات المنشأه من الفئة باسم $classObj
- سنعرف مصفوفة خاصة لحفظ الإستعلام باسم $sqlQuery
- سننشئ باني الفئة ونجعله محمي ونضبط قيمة متغير اسم الجدول من خلاله ثم نستدعي باني الفئة الأب mySQL من داخله .
* هذه هي الخطوط العريضة عن الفئة ووجدت أن التعليق داخل الكود سيكون أفضل لتوصيل الفكرة والتالي رابط التنزيل :
* كيفية التعامل مع الفئة :
أولاً : عليك ضبط قيم الإتصال بقاعدة البيانات في الفئة mySQL .
ثانباً : إنشاء جداول وملئها ببعض القيم لتجريب الفئة عليها .
- فلنفرض أنك قمت بعمل جدول باسم users وثلاث حقول هي id رقم زيادة تلقائية و username نص و password نص .
1- سنقوم بإنشاء كائن من الفئة myTable كالأتي :
$obj = mytable::getObj('users');أو
$obj = mytable::getTableObj('users');كما هو موضح داخل الكود عن هذه الجزئية
- وقمت بعمل دالة باسم echoQuery() لطباعة الإستعلام للتحقق من صحته ولتتبع عمل الفئة كالتالي :
$obj = mytable::getObj('users');
$obj->select();
$obj->echoQuery();ناتج هذا الكود سيكون كالتالي :
SELECT * FROM `users`
- ولتطبيق الكود السابق علي قاعدة البيانات سنستخدم دالة make() ويكون الكود كالتالي :
$obj = mytable::getObj('users');
$obj->select();
$obj->make();* لنأخذ بعض الأمثلة المتعددة للتطبيق على هذه الفئة :
- مثال 1 :
$obj = mytable::getObj('users');
$a[] = 'id';
$a[] = 'username';
$obj->select($a);
$obj->echoQuery();* المخرجات :
SELECT `users`.`id`,`users`.`username` FROM `users`
- مثال 2 :
$obj = mytable::getObj('users');
$a = 'id,username';
$obj->select($a);
$b['id'] = '6';
$obj->where($b);
$obj->echoQuery();* المخرجات :
SELECT `users`.`id`,`users`.`username` FROM `users` WHERE `users`.`id`='6'
- مثال 3 :
$obj = mytable::getObj('users');
$a = '*';
$obj->select($a);
$b['username'] = 'ahmed';
$b['password !='] = '123';
$obj->where($b);
$obj->echoQuery();* المخرجات :
SELECT * FROM `users` WHERE `users`.`username`='ahmed' AND `users`.`password`!='123'
- مثال 4 :
$obj = mytable::getObj('users');
$a['id'] = null;
$a['username'] = 'kamal';
$a['pasword'] = '98999';
$obj->insert($a);
$obj->echoQuery();* المخرجات :
INSERT INTO `database`.`users` (`id`,`username`,`pasword`) VALUES (NULL,'kamal','98999')
- ومن أوامر لغة SQL فلا تستخدم WHERE مع INSERT فلا يأتي أحد ويقول يحدث خطأ عند إستخدام دالة where بعد insert
, عموماً أترك لك الفئة لمعالجة هذه الإثتثناءات إن أردتم .
- مثال 5 :
$obj = mytable::getObj('users');
$a['username'] = 'jamal';
$a['pasword'] = '2555';
$obj->update($a);
$b['id'] = array('!=10' ,20);
$b['username !='] = 'ahmed';
$obj->where($b,'OR');
$obj->echoQuery();* المخرجات :
UPDATE `database`.`users` SET `username`='jamal',`pasword`='2555' WHERE `users`.`id`!='10' OR `users`.`id`='20' OR `users`.`username`!='ahmed'
- مثال 6 :
$obj = mytable::getObj('users');
$obj->select();
$obj->where(array('id <' => 100));
$obj->limit(0,30);
$obj->echoQuery();* المخرجات :
SELECT * FROM `users` WHERE `users`.`id`<'100' LIMIT 0,30
- مثال 7 :
$obj = mytable::getObj('users');
$a['id'] = '15';
$obj->delete_where($a);
$obj->echoQuery();* المخرجات :
DELETE FROM `database`.`users` WHERE `users`.`id`='15'
- ركز جيداً في الأكواد السابقة ومخرجاتها لتتبع كيفية عمل هذه الفئة جيداً والتعديل عليها لكي تناسب إحتياجاتك .
* ملاحظة : نحن نستخدم mysqli وبالتالي العائد من الدالة make() هو كائن من فئة mysqli ولتوضيح هذا إليك المثال التالي :
$obj = mytable::getObj('users');
if($obj->select())
{
if ($result = $obj->make())
{
printf("Select returned %d rows.\n", $result->num_rows);
$result->close();
}
}- وهو يكافئ في العمل الكود التالي :
$mysqli = new mysqli("localhost", "my_user", "my_password", "world");
if ($result = $mysqli->query("SELECT * FROM `users`"))
{
printf("Select returned %d rows.\n", $result->num_rows);
$result->close();
}* أرجوا أن تكونوا قد إستفدتم من هذه الفئة في كيفية برمجة الفئات الخاصة بكم بإستخدام برمجة الكائنات , وأنتظر منكم تجربة الفئة وإبداء آرائكم لأني لم أختبرها بالشكل الكافي .
* وهذه معلومات سريعة عن دوال اللغة التي قمت بإستخدامها داخل الفئة وروابط لها لسهولة الوصول لمعلومات عنها من موقع الـphp :
1- الدالة السحرية __callStatic() وهي تعمل في حالة تم إستدعاء دالة ساكنة غير موجودة في الفئة .
2- count() لحساب عدد عناصر المصفوفة .
3- is_int() للتحقق من القيمة عدد صحيح .
4- is_string() للتحقق من القيمة أنها سلسة نصية .
5- explode() لتحويل السلسة النصية إلي مصفوفة .
6- implode() لتحويل المصفوفة إلي سلسة نصية .
7- trim() لإزالة الفراغات قبل وبعد القيمة .
8- preg_match() للبحث عن التعبير المنتظم داخل سلسة نصية .
10- preg_replace() لإستبدال التعبير المنتظم بقيمة معينة في سلسة نصية معينه .
11- empty() للتحقق من عدم وجود قيمه في المتغير .
12- strtoupper() لتحويل الحروف إلى حروف كبيره .
13- isset() للتحقق من تعريف المتغير .
14- إستخدام المعاملات المنطقية === و !== للمساواه القيم الفارغة من نفس النوع .