php استغلال قاعدة البيانات

PHP PDO : ربط الإتصال بقاعدة البيانات

آخر تحيين: 10-01-2015

php MySQL : أخذ البيانات من القاعدة استعمال قاعدة البيانات


لاستغلال قاعدة البيانات كيفما كان نوعها " MySql ، Postgre ، Oracle ،SQLITE ..." يجب أوّلا ربط الإتصال بها عن طريق لغة php . لأن هذا الأخير يجب أن يعرف معلومات عن القاعدة التي سيتعامل معها مثل نوعها و إسمها . بالإضافة إلى إسم المستخدم و كلمة المرور .
قبل php5 ، كانت لدينا عدّة طرق لربط الإتصال بقاعدة البيانات ، و تختلف هذه الطّرق حسب واجهة التطبيقات "API" المستعملة من قاعدة إلى أخرى .
مثلا لربط الإتصال بقاعدة البيانات Mysql نستعمل واجهة "mysql" .



بصفة عامّة كل قاعدة تستعمل واجهة php الخاصة بها :



و كان العمل مظنيا سواء للمبرمجين الذي يجب عليهم إعادة كتابة واجهة خاصة لكل قاعدة بيانات ، أو للمستخدمين نظرا لفقدان أغلب هذه الواجهات لأدوات أصبحت حيوية لبرمجة تطبيقات الويب . أتى الحلّ كاملا و جد مرضيا مع ظهور النسخة الخامسة . إذ تمت برمجة طبقة أو واجهة مُوحّدة ، تمكننا من استغلال أغلب قواعد البيانات بنفس الطريقة . و هذه الطبقة تُسمّى PDO .
Php Data Objects = PDO : كائن بيانات مبرمج بلغة C ، و يستعمل من طرف php لربط الإتصال بجميع قواعد البيانات :



سنعتمد في دروسنا قاعدة MySQL و سنستعمل PDO لاستغلالها ، و كل ما سنراه ينطبق أيضا على قواعد البيانات الأخرى . الإختلاف الوحيد و الطفيف يكمن في طريقة إتصالنا بقاعدة البيانات . سأعطيكم مثالا للإتصال بكل قاعدة ، من بعدها يمكنكم متابعة الدروس بأي قاعدة تودّون . أريد أن أثير انتباهكم إلى شيئين أو ثلاثا دفعنا لاختيار قاعدة MySQL بدل PostGreSQL أو Oracle :

  • MySQL : مجانية و كاملة ، و الأكثر استعمالا على أغلب مستضيفي الويب .
  • PostGreSQL : كاملة و مجانية .لكن مجموعة من مستضيفي الويب لا يستخدمونها .
  • Oracle : كاملة مع ميزات إضافية ، مُؤدّى عنها و بثمن غال . تُستخدم من طرف الشّركات الكبرى .

php ربط الإتصال بقاعدة البيانات

لربط الإتصال بقاعدة البيانات عن طريق PDO ، نقوم بتهييء مصفوفة جديدة ثم نعطيها بعض الحجج . سأعطيكم مثالا عاما ، ثم سنرى كيفية الإتصال بكل قاعدة .

<?php
$db = new PDO('DSN:host=$hostname;dbname=$db_name;charset=utf8', $user, $password);
?>

لا تنخدعوا بطول الشيفرة ، فهي جد سهلة :

  • db$ = ليست كالمتغيرات التي تعرّفتم عليها سابقا . بل هي مصفوفة تدخل في نطاق برمجة الكائنات "POO" . لستم مطالبين لمعرفة سواء معنى المصفوفة أ و برمجة الكائنات ، هذا لن يعيق البتة تقدمكم .
    قمنا بتهيئ مصفوفة جديدة $db= new PDO();ثم مرّرنا لها الحجج اللازمة لربط الإتصال بقاعدة البيانات ، و هذه الحجج هي :
  • DSN = نوع قاعدة البيانات : مثل "pgsql, Informix, OCI, mysql ..." .
  • host = المُزوّد أو الخادوم : في مثالنا سنستعمل "localhost" . لأننا نشتغل محليا ، أما إذاقمتم باستضافة موقعكم على الويب ، فمضيفكم هو الذي سيزودكم بهذه المعلومة ، و هذا ينطبق أيضا على حجتي "إسم المستخدم " و "كلمة المرور"
  • dbname : إسم قاعدة البيانات في مثالنا سميناها "test"
  • charset يجب اختيار الترميز أثناء تهييء المصفوفة ، لأسباب أمنية ، و ليس بعدها ، كما قد تصادفون في بعض السكريبتات .
  • user$= إسم المستخدم : مبدئيا هو "root" إذا لم تغيّروا هذا الإسم أثناء تنصيب خادوم APACHE على حاسوبكم ،
  • password$ : مبدئيا هذه الحجة تكون فارغة

هذا يبقى غير كاف ، يجب أيضا إضافة شرط لمعرفة الأخطاء التي ارتكبناها إذا لم نتوفق بالإتصال بالقاعدة . كالشروط التي تعرفونها ، بدل استعمال "if ... else" سنستعمل "try ... catch". قد تبدوا لكم الشيفرات غريبة ، كما قلت سابقا ، أنقلوها كما أقترحها عليكم . و لا تهتموا كثيرا لحالها .
إذاً ستكون شيفرتنا النهائية كالتالي

<?php
try 
{
    // الإتصال بقاعدة البيانات
} 
catch(PDOException $e)
{
   // عرض الأخطاء
}
?>

.
الشرط Try فعل أمر يعني "حاوِل" : أي حاول معرفة ما إذا كانت الحجج صحيحة و قم بربط الإتصال .
Catch : في حالة وجود أخطاء سيتم ضبطها ، ثم عرضها عبر echo

هذه هي الحجج المستعملة غالبا لربط الإتصال بجميع قواعد البيانات ، سأعطيكم مثالا عن كل قاعدة . لستم مجبرين على قراءتها كلها . بل إطّلعوا فقط على القاعدة التي تهمكم .
نحن قد نصّبنا قاعدة "MySQL" . لهذا سأبدأ بها ،

أولا قوموا بتشغيل خادومكم المحلي "wamp , xampp, ..." . ثم أنشؤوا صفحة جديدة على برنام تحرير النصوص ، و لا تنسوا إختيار ترميز utf8 لصفحتكم . هذا جد ضرورري لخلق التناغم الذي بدأناه ، حتى لا نتفاجأ بمشاكل الترميز لاحقا .


ربط الإتصال مع MySQL

انسخوا هذه الشيفرة في صفحتكم:

<?php
try 
{
  $db = new PDO('mysql:host=localhost;dbname=test;charset=utf8', 'root', '');
} 
catch(PDOException $e)
{
    echo $e->getMessage();
}
?>

بعد حفظ الصفحة ، قوموا بعرضها على المتصفح . إن ظلت بيضاء ، فقد تمكّنتم من الولوج إلى قاعدة البيانات بنجاح . أمّا إذا ظهرت لديكم أخطاء ، حاولوا أن تفهموها لتصحّحوها ، إن لم تستطيعوا العثور على أخطائكم ، يمكنكم طرحها على الأعضاء في منتدى "php mysql" ، ليتمكنوا من مساعدتكم .
إن كان هناك شيء لأركز عليه ، سيكون اختيار الترميز :


على برنام تحرير النصوص ، يجب دائما اختيار ترميز utf8 لصفحاتكم.
قاعدة البيانات و الجداول ، يجب أيضا أن تكون بترميز utf8 كما رأينا .
ثم اختيار الترميز أيضا أثناء ربط الإتصال بقاعدة البيانات .

ربط الإتصال مع PostGreSQL

<?php
try 
{
  $db = new PDO("pgsql:dbname=test;host=localhost;charset=utf8", "user", "password" );
} 
catch(PDOException $e)
{
  echo $e->getMessage();
}
?>

ربط الإتصال مع Oracle

<?php
try 
{
  $db = new PDO("OCI:dbname=test;charset=UTF-8", "user", "password");
} 
catch(PDOException $e)
{
  echo $e->getMessage();
}
?>

ربط الإتصال مع Informix

<?php
try 
{
  $db = new PDO("informix:DSN=InformixDB", "user", "password");
} 
catch(PDOException $e)
{
    echo $e->getMessage();
}
?>

ربط الإتصال مع IBM DB2

<?php
try 
{
 $db = new PDO("ibm:DRIVER={IBM DB2 ODBC DRIVER};
       DATABASE=test; 
       HOSTNAME=1.2.3,4;
       PORT=56789;
       PROTOCOL=TCPIP;", "user", "password");

} 
catch(PDOException $e)
{
 echo $e->getMessage();
}
?>

ربط الإتصال مع Firebird

<?php
try 
{
 $db = new PDO("firebird:dbname=localhost:C:\Programs\Firebird\DATABASE.FDB", "SYSDBA", "masterkey");

} 
catch(PDOException $e)
{
 echo $e->getMessage();
}
?>

بعد ربط الإتصال بقاعدة البيانات ، يمكنكم متابعة الدّروس مهما كان نوع القاعدة التي اعتمدتموها . ستبدأ الأمور المشوقة و التي طالما انتظرتموها . سنرى أوّلا كيفية أخذ البيانات من القاعدة . و سنختمها بجميع العمليات الأخرى : من إضافة البيانات و تعديلها و حذفها .