ثانياً, التعامل مع قواعد البيانات :
اعتقد بان الكثير منكم يترقب هذه الفقرة بشغف لمعرفة الفرق بين الطريقة العادية وطريقة CI في التعامل مع قواعد البيانات .. حسنا ها نحن هنا .. لنشاهد الفرق سوياً ..
* ملاحظة : من المفترض والضروري وضع جميع الاوامر الخاصة بقاعدة البيانات بداخل ملف model منفصل لتنسيق الكود .. ولكن سوف اطرق إلى ذلك بإذن الله في الجزء القادم .. ولكن حالياً فقط سوف ننفذ الاوامر في الـ Controller لإختصار الوقت والشرح
اولاً .. نذهب إلى application/config/database.php
ونقوم بتعديل معلومات قاعدة البيانات حسب ما يناسبنا ( انتبه من الترميز .. اذا كنت تستخدم utf8 او latin1 )
ثانياً .. عند استخدام اوامر قاعدة البيانات يجب ان نستدعي الـ Library الخاصة بقاعدة البيانات اولاً . مثال :
كود PHP:
<?php
class Books extends Controller {
function index()
{
$this->load->database();
}
}
?>
من خلال هذا المثال .. سوف نقوم بإستدعاء الـ Library الخاصة بالتعامل مع قاعدة البيانات .. ولكن مهلاً .. لو كنا نمتلك صفحة اخرى ( أي function آخر ) .. فلن نستطيع استخدام اوامر قاعدة البيانات بداخله .. بل يجب علينا استدعاء الـ Library مرة اخرى .... حسناً هل سنقوم بهذه العملية في كل صفحة في الـ Class ؟؟؟ الأمر متعب اعلم .. ولكن مهلاً هناك دائماً حل 
سوف نستخدم الـ Construct .. حسناً ماهو الـ Construct اولاً ؟؟ مزيد من المعلومات هنا
ولكن فقط للشرح السريع .. الـ Construct هو عبارة عن function يقوم بتنفيذ اي امر تطلبه منه .. في بداية الـ Class نفسه ( أي ان الامر سيظهر مع كل function آخر في الصفحة ).. بمعنى لو وضعنا عبارة معينة داخل الـ Construct .. فسوف يطبعها عند استعراضنا لأي صفحة بداخل الكلاس Books ...
لنأخذ مثال عملي .. في حالة كنت تستخدم PHP4 . يجب ان يكون اسم function الـ Construct بنفس اسم الكلاس ويجب ان يحتوي على سطر الوراثة من كلاس Controller وهذا السطر مهم جدا جدا جدا وستواجه اخطاء اذا لم تستخدمه
وبعدها سوف نضع سطر إستدعاء Library قاعدة البيانات في فنكشن الـ Construct
مثال :
كود PHP:
<?php
class Books extends Controller {
function Books()
{
// Construct
parent::Controller();
$this->load->database();
}
function index()
{
}
}
?>
اما اذا كنت تستخدم PHP5 فسوف نقوم بتغيير اسم فنكشن الـ Construct فقط إلى :
كود PHP:
function __construct()
{
parent::Controller();
}
حسناً .. الآن بعد ان وضعنا سطر استدعاء الـ Library في الـ Construct .. سوف نستطيع ان نستخدمها في كل الـ Functions ( الصفحات ) في الـ Class الخاص بنا ...
ولكن مازال هناك حل آخر
... سوف نقوم بوضع الـ Library في ملف الـ Autoload ليقوم CI بإستدعاءها تلقائياً بدون ان تكتب حتى سطر الإستدعاء في الفنكشن نفسه او حتى في الـ Construct ...
افتح ملف application/config/autoload.php
وعدل السطر
كود PHP:
$autoload['libraries'] = array();
إلى
كود PHP:
$autoload['libraries'] = array('database');
ملاحظة : تستطيع ان تستدعي عدد المكتبات كما تريد بإضافتهم إلى هذا الـ Array
الآن انا افضل بصراحة استدعاء قاعدة البيانات في الـ Construct .. فقط لأنني اعلم بانه سيكون هناك صفحات لا تحتاج إلى وظائف قاعدة البيانات وسوف يقوم CI بإستدعاءها غصباً عنك 
حسناً .. دعونا ننشأ جدول ليحتوي على الكتب, ونضع بداخله 3 كتب للتجربة ... سريعاً .. :
كود PHP:
CREATE TABLE `books` (
`id` INT(11) NOT NULL AUTO_INCREMENT PRIMARY KEY,
`title` VARCHAR(100) NOT NULL
);
INSERT INTO books VALUES (1, 'Learn PHP');
INSERT INTO books VALUES (2, 'Learn Codeigniter');
INSERT INTO books VALUES (3, 'Learn OOP');
حسناً .. ما نريد فعله الآن .. هو تنفيذ المثال في الأعلى ( الخاص بالروابط ) ولكن سوف نستدعي البيانات من قاعدة البيانات مباشرة ...
مستعدون ؟ الأمر اصغر مما تتخيلون 
الـ Controller :
كود PHP:
<?php
class Books extends Controller {
function Books()
{
// Construct
parent::Controller();
$this->load->database();
}
function index()
{
$data['query'] = $this->db->get('books');
$this->load->view('books',$data);
}
}
?>
كما ترون قمنا بإستدعاء الـ Library الخاصة بالتعامل مع قواعد البيانات في فنكشن الـ Construct ليتم إستدعائها حتى ولو قمنا بعمل صفحات ( functions ) اخرى بداخل نفس الكلاس ولن نضطر إلى تكرار الأمر
وفي فنكشن index كما تشاهدون أول سطر سهل جداً وهو حيث اننا قمنا بصنع مصفوفة بأسم data لنمرر من خلالها البيانات إلى ملف الـ View .. وقمنا بإستدعاء ما بداخل جدول books عن طريق الأمر هذا :
كود PHP:
$this->db->get('books');
أصبح الآن لدينا النتائج من جدول Books في مصفوفة . وسنقوم بإستخراج محتواها بداخل ملف View .. لنشاهد محتوى ملف الـ View كيف سيكون ... :
كود PHP:
<ul>
<?php foreach ($query->result() as $row){ ?>
<li><a href="books/details/<?=$row->id?>"><?=$row->title?></a></li>
<?php } ?>
</ul>
الأمر بسيط اليس كذلك 
حسناً .. لنفترض اننا نريد ان نستخرج البيانات حسب رقم الـ ID ولكن تصاعدياً كالمثال :
3
2
1 وليس
1
2
3
الأمر أسهل مما تتخيلون 
فقط أضف السطر هذا إلى أعلى السطر الأول ليصبحوا معاً كالآتي :
كود PHP:
$data['query'] = $this->db->order_by('id','DESC');
$data['query'] = $this->db->get('books');
حسناً .. سنتعمق اكثر في المثال .. سوف ننشئ صفحة التفاصيل التي ستظهر بعد الضغط على كتاب منهم .. وما سوف نفعله في صفحة التفاصيل .. هو اننا سوف نأتي بعنوان الكتاب وبالإعتماد على رقم الـ ID من الرابط ..
حسناً سيصبح شكل الـ Controller كالآتي :
كود PHP:
<?php
class Books extends Controller {
function Books()
{
// Construct
parent::Controller();
$this->load->database();
}
function index()
{
$data['query'] = $this->db->order_by('id','DESC');
$data['query'] = $this->db->get('books');
$this->load->view('books',$data);
}
function details($id){
}
}
?>
الآن سوف نستخدم الطريقة الاولى للتعامل مع الروابط والتي قمت بشرحها في الأعلى ... لدينا الآن رقم الـ ID في متغير .. ماذا نفعل لنستخدمه لإحضار الكتاب الذي يحمل نفس رقم الـ ID ؟
سهلة 
كود PHP:
function details($id){
$data['query'] = $this->db->where('id',$id);
$data['query'] = $this->db->get('books');
$this->load->view('details',$data);
}
ملف الـ View :
* يجب إنشاءه طبعا داخل مجلد application/views بأسم details.php
كود PHP:
<h1><?=$query->row()->title?></h1>
الآن قمنا بإستخدام دالة جديدة بداخل كلاس قاعدة البيانات وهي where . حيث ان Parameter الأول هو عنوان الخانة في قاعدة البيانات والمدخل الثاني هو قيمة البحث بمعنى ان أمر قاعدة البيانات الفعلي سيكون :
كود PHP:
SELECT * FROM books WHERE id = '$ID'
وحيث اننا نمتلك نتيجة واحدة فقط .. فلن احتاج بكل تأكيد ان امرر المخرجات على حلقة تكرار ( foreach او while ) لذلك استخدام الدالة row() وهي تعني انه سيعطيك نتيجة واحدة فقط حسب الشروط التي وضعتها ( سواء order_by او where او غيرها )
بإذن الله غداً سوف اضع مثال آخر هنا لكيفية إدخال معلومات لقاعدة البيانات ( insert ) وايضاً كيفية الحذف .. ولمن لا يستطيع الصبر فهذا هو الدليل الكامل لكيفية التعامل مع قواعد البيانات في CI
انتهى 
يتبع ان شاء الله ...