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

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

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

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


بعد نجاحنا في الإتصال بالقاعدة ، يمكننا الآن استغلالها و إجراء العمليات عليها ، من إدخال للبيانات ، عرضها ، تحيينها و حذفها . عن طريق لغة SQL . الأوامر التي سنتعامل معها هي أربعة :

  • INSERT : إدخال البيانات في القاعدة
  • SELECT : إختيار البيانات من القاعدة
  • UPDATE : تحيين بيانات القاعدة
  • DELETE : حذف البيانات من القاعدة

سنبدأ بقراءة بيانات القاعدة ، ثم سنتعرف لاحقا كيف يمكننا استعمال الإستمارة لإدخال هذه البيانات ، تحيينها و حذفها .

SELECT

للإستمرار ، سنعتبر مبدئيا أنه لديكم قاعدة بيانات "test" التي أنشأناها سابقا .
لاختيار البيانات من القاعدة ، يجب طبعا أن يكون لدينا على الأقل جدول مليء بالمعطيات . لهذا ، يمكنكم سواء استعمال جدولكم السابق "news" . أو من الأفضل تحميل هذا الجدول الذي أقترحه عليكم :


الملف الذي حملتموه من نوع "zip" . يحتوي على مستند sql لإنشاء جدول مليء بالبيانات . لستم محتاجين لفك الضغط عنه . سنستعمله كما هو . لهذا سنستعمل وظيفة "Import".
إفتحوا إذاً صفحة phpMyAdmin لديكم .

  1. انقروا على قاعدة البيانات "test".
  2. ثم على رابط "Import" أو "إستيراد" في القائمة الأفقية .
  3. و في الصفحة الجديدة ، إرفعوا ملف "employees.zip" .
  4. أنقروا على "GO" أو "تنفيذ" لإتمام عملية إنشاء الجدول

الشرح بالصورة



بعد نقركم على "Go" سيتم إنشاء جدول باسم "employees" . وسيظهر على العمود الجانبي :



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


تم إنشاء جدولنا ، دعوا صفحة phpMyAdmin جانبا ، ثم قوموا بإنشاء صفحة php جديدة . أول ما سنقوم به هو ربط الإتصال بالقاعدة "test" ، كما تعلمتم :

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

die : تقوم بتوقيف تنفيذ السكريبت و عرض الأخطاء الناجمة .

سأضع أمام أعينكم أول شيفرة SQL ، تمكّكنا من اختيار جميع البيانات من الجدول ، بدون استثناء

SELECT * FROM employees

لنفصل معنى الشيفرة :

  • SELECT : فعل أمر من اختار ، يختار : إختَر
  • * : النجمة تعني "كل البيانات" . إذا أردنا اختيار جزء من البيانات فقط ، مثل اسم و خبرة العمال سنستبدل النجمة بأسماء الحقول المواتية ، و نفصل بينها بعلامة ,
    SELECT name, experience FROM employees
  • FROM : من
  • employees : إسم الجدول . بطبيعة الحال يجب دائما تحديد الجدول الذي سنختار منه بياناتنا

الشيفرة كاملة تعني : employees إختر جميع البيانات من جدول

لجعل هذه الشيفرة عملية يجب توظيفها في صفحة php . ليكن في علمكم ، أنه توجد طرق عديدة لإستغلال البيانات . سنستعمل طريقة تهييء الإستعلام "prepare" و هي من أهم ميزات pdo .

$response = $db->prepare('SELECT * FROM employees');

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

$response = $db->prepare('SELECT * FROM employees');
$response->execute();

إذا نسيتم ذات مرة ، إضافة "execute" للإستعلام . فأمركم لن يُنفّذ

بعد تنفيذ الإستعلام ، سنقوم بجمع البيانات التي حصلنا عليها من جدول القاعدة ، في متغيّر جدول . و سنستعمل لذلك تعليمة fetchAll()

$response = $db->prepare('SELECT * FROM employees');
$response->execute();
$employees = $response->fetchAll();

()fetchAll تعني "إبحث عن كل البيانات " . كما قلت لكم سابقا ، قد تبدو لكم الشيفرات غريبة ، استعملوها كما هي و ستعتادون عليها بسرعة .
و الآن بما أننا أنهينا تنفيذ الإستعلام ، و جمع بياناتنا في متغير جدول $employees (يمكنكم تسميته كما تشاؤون ) . سنقوم بغلق الإتصال بقاعدة البيانات باستعمال الشيفرة التالية .

$response->CloseCursor();

لم يبقى لنا سوى عرض بياناتنا . كما تعلمتم أن تفعلوا . لديكم الخيار بين استعمال الحلقة While أو foreach . بما أن هذه الأخيرة خاصة بالجداول ، أحبذ استعمالها

<?php
foreach($employees as $employee) {
  echo $employee['name'].'-'.$employee['gender'].'-'.$employee['task'];
}
?>

الشيء الجديد هنا هو أن مفاتيح متغير الجدول هي أسماء الحقول الموجودة في جدول قاعدة البيانات ، تذكروا هذا جيدا .

خلاصة كل مارأيناه يكمن في الشيفرة أسفله ، يمكنكم تجربتها لعرض بياناتكم :

<?php 
$response = $db->prepare('SELECT * FROM employees');    /* تهييء الإستعلام */
$response->execute();                                  /* تنفيذ الإستعلام */

$employees = $response->fetchAll();         /* جمع البيانات في متغير جدول  */
$response->CloseCursor();                  /* غلق الإتصال بالقاعدة */

foreach($employees as $employee) {
 echo $employee['id'].'-
    '.$employee['name'].' - 
    '.$employee['gender'].' -
    '.$employee['task'].'<br>';
}
?>

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

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

$response = $db->prepare('SELECT * FROM employees');/* تهييء الإستعلام */
$response->execute();                               /* تنفيذ الإستعلام */

$employees = $response->fetchAll();           /* جمع كل البيانات في متغير جدول  */
$response->CloseCursor();                    /* غلق الإتصال بالقاعدة */
?>
<!DOCTYPE html>
<html dir="rtl">
<body>
<table border="1">
<tr>
  <th> ر - ت </th>
  <th> الإسم </th>
  <th> الجنس </th>
  <th> المهمة </th>
  <th> الخبرة </th>
  <th> الأجرة </th>
</tr>
<?php
foreach($employees as $employee)
{
  echo '<tr>';
  echo '
    <td>'.$employee['id'].'</td>
    <td>'.$employee['name'].'</td>
    <td>'.$employee['gender'].'</td>
    <td>'.$employee['task'].'</td>
    <td>'.$employee['experience'].'</td>
    <td>'.$employee['salary'].'$</td>
    ';
  echo'</tr>';
}
?>
</table>
</body>
</html>