التعامل مع قواعد بيانات MySQL بإستخدام لغة PHP

تعد لغة PHP من أكثر لغات البرمجة إستخداماً في برمجة المواقع الإلكترونية, حيث أنها تستخدم بشكل أساسي كوسيط بين زوار الموقع و قاعدة البيانات الخاصة بالموقع.

فمثلاً عندما تقوم بطلب صفحة من موقع مبني بلغة PHP ستقوم لغة PHP بقراءة رابط الصفحة التي طلبتها. بعدها ترسل إستعلام (Query) إلى قاعدة البيانات يقضي بطلب محتوى الصفحة الخاصة بهذا الرابط. في حال كان الرابط موجود في قاعدة البيانات تقوم PHP بعرض محتوى الصفحة الخاصة بهذا الرابط لك. و في حال كان الرابط غير موجود في قاعدة البيانات فإن PHP ستقوم بتوجيهك لصفحة مكتوب فيها على سبيل المثال “الصفحة المطلوبة غير موجودة”.

مثال آخر, عندما تحاول تسجيل الدخول في موقع مبني بلغة PHP ستقوم لغة PHP بالبحث في قاعدة البيانات عن مستخدم يملك الإسم و كلمة المرور المدخلة التي أدخلها الزائر. في حال وجدتها موجودة في قاعدة البيانات ستقوم بإدخاله و في حال لم تجدها ستقوم بإبلاغه مثلاً أن هناك مشكلة في تسجيل الدخول و قد تخبره أن المشكلة في كلمة المرور أو أن حسابه تم إيقافه إلخ..

في هذا المقال ستتعلم كيف تربط لغة PHP بقواعد بيانات MySQL عبر أوامر MySQLi.

 

مفهوم الـ CRUD Operations

بشكل عام, هذا المصطلح يقصد به العمليات المتعارف عليها في قواعد البيانات و التي سنعلمك كيف تفعلها بتفصيل ممل في هذا المقال.

الآن, كل حرف في كلمة CRUD هو اختصار لمصطلح متعارف عليه في قواعد البيانات.

الحرف C: إختصار لكلمة Create و يقصد به إضافة بيانات جديدة في قاعدة البيانات.

مثل إضافة معلومات مستخدم جديد في قاعدة البيانات باستخدام الأمر insert.

الحرف R: إختصار لكلمة Read و يقصد به قراءة بيانات من قاعدة البيانات.

مثل جلب محتوى المقال الذي تقرؤه الآن من قاعدة البيانات بإستخدام الأمر select.

الحرف U: إختصار لكلمة Update و يقصد به تحديث بيانات كانت موجودة في قاعدة البيانات.

مثل تحديث معلومات المستخدم في قاعدة البيانات بإستخدام الأمر update.

الحرف D: إختصار لكلمة Delete و يقصد به حذف بيانات من قاعدة البيانات.

مثل حذف تعليق على مقال ما من قاعدة البيانات بإستخدام الأمر Delete.

إذاً, CRUD تعني إضافة، قراءة، تحديث، حذف.

 

طريقة الإتصال بسيرفر قاعدة البيانات بإستخدام mysqli

قبل البدء, لا تنسى التأكد من تشغيل السيرفر المحلي (سواء كنت تستخدم XAMP أو MAMP) قبل أن تجرب تنفيذ أي أمر على قاعدة البيانات لأنه سيظهر لك خطأ في الإتصال حتى و إن كانت كل المعلومات الموضوعة صحيحة.

في المثال التالي قمنا بالإتصال بقاعدة بيانات موجودة على سيرفر محلي و هذا سبب وضع localhost.

كما إفترضنا أن اسم المستخدم في قاعدة البيانات هو username و كلمة المرور هي password.

<?php
$servername = "localhost"; // الخاص بالسيرفر ip إسم السيرفر أو 
$username = "username";    // إسم المستخدم الخاص بقاعدة البيانات
$password = "password";    // كلمة المرور الخاصة بقاعدة البيانات
// إنشاء الاتصال
$conn = new mysqli($servername, $username, $password);
// $conn هذا المتغير الخاص بالاتصال سوف نحتاجه في اي عملية نرغب بإجرائها على قاعدة البيانات
// التأكد من عملية الاتصال بسيرفر قاعدة البيانات 
if ($conn->connect_error)
{
    echo "توجد مشكلة في الاتصال: " . $conn->connect_error;
}
else
{
    echo "تم الاتصال بنجاح";
}
?>


طريقة إنشاء قاعدة البيانات

في المثال التالي قمنا بكتابة أمر ينشئ قاعدة بيانات إسمها learn.

<?php
$servername = "localhost"; // الخاص بالسيرفر ip إسم السيرفر أو 
$username = "username";    // إسم المستخدم الخاص بقاعدة البيانات
$password = "password";    // كلمة المرور الخاصة بقاعدة البيانات

// إنشاء الاتصال
$conn = new mysqli($servername, $username, $password);

// هذا المتغير الخاص بالاتصال سوف نحتاجه في اي عملية نرغب بإجرائها على قاعدة البيانات $conn 
// التأكد من عملية إنشاء قاعدة البيانات  
$create_db = $conn->query("CREATE DATABASE learn");
if ($create_db === TRUE) 
{
    echo "تم إنشاء قاعدة البيانات بنجاح";
}
else
{
    echo "خطأ، لم يتم انشاء قاعدة البيانات: " . $conn->error;
}


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

بعدما أنشأنا قاعدة البيانات أصبح بإمكاننا الإتصال بها و إرسال الأوامر إليها.

في المثال التالي قمنا بكتابة الكود الذي يستخدم بشكل أساسي للإتصال بقاعدة البيانات و الذي نتأكد من خلاله أن ذلك ممكن أم لا.

<?php
$servername = "localhost"; // الخاص بالسيرفر ip إسم السيرفر أو 
$username = "username";    // إسم المستخدم الخاص بقاعدة البيانات
$password = "password";    // كلمة المرور الخاصة بقاعدة البيانات

// إنشاء الاتصال
$conn = new mysqli($servername, $username, $password);

// هذا المتغير الخاص بالاتصال سوف نحتاجه في اي عملية نرغب بإجرائها على قاعدة البيانات $conn 
// التأكد من عملية الاتصال بقاعدة البيانات 
if ($conn->connect_error)
{
    echo "توجد مشكلة في الاتصال: " . $conn->connect_error;
}
else
{
echo "تم الاتصال بنجاح";
}
?>


طريقة إنشاء جدول جديد في قاعدة البيانات

في المثال التالي قمنا بإنشاء جدول جديد (Table) في قاعدة البيانات إسمه info.

<?php
$create_table = $conn->query("CREATE TABLE info (
  id INT,
  full_name TEXT,
  phone TEXT,
  email TEXT
)");
// كلمة محجوزة تستخدم لإنشاء الجدول CREATE TABLE
/*
طريقة الاستخدام
ثم اسم الجدول CREATE TABLE نقوم بكتابة 
داخل () نقوم بكتابة اسم العمود ثم نوع البيانات التي يستقبلها
كأننا نقول انشئ جدول بإسم ثم عمود ويستقبل نوع من البيانات
*/
// يوجد العديد من أنواع البيانات مثل الارقام، النصوص، التاريخ ...الخ 
// التأكد من تنفيذ عملية انشاء الجدول  
if ($create_table === TRUE)
{
    echo "تم إنشاء الجدول";
} 
else
{
    echo "خطأ، لم يتم انشاء الجدول: " . $conn->error;
}
?>


طريقة إضافة بيانات جديدة في الجدول

في المثال التالي قمنا بإضافة سطر (نفسها صف, سجل, Record) من المعلومات في الجدول info.

<?php
$insert_data = $conn -> query("INSERT INTO info (id, full_name, phone, email)
VALUES (1, 'Alaa Najmi', '96650000000', 'alaa@alaa.com')");
// كلمة محجوزة تستخدم لإضافة البيانات للجدول INSERT INTO 
/*
طريقة الاستخدام
ثم اسم الجدول المراد اضافة البيانات له INSERT INTO نقوم بكتابة 
داخل () نقوم بكتابة الاعمدة التي نرغب باضافة البيانات لها
نقوم بكتابة داخلها البيانات ويكون ترتيب البيانات مطابق لترتيب العمود المدخل في القوس السابق VALUES()
كأننا نقول اضف للجدول التالي (الاعمدة التالية) بالقيم التالية (القيم)
*/
// لتأكد من تنفيذ عملية اضافة البيانات
if ($insert_data) === TRUE) {
    echo "تم إضافة البيانات للجدول";
}
else
{
    echo " خطأ، لم يتم اضافة البيانات :". $conn->error;
}
?>


طريقة قراءة البيانات من الجدول

في المثال التالي قمنا بجلب جميع المعلومات المخزنة في الجدول info.

<?php
$read_data = $conn->query("SELECT * FROM info");
//كلمة محجوزة تستخدم لقراءة البيانات من الجدول SELECT
// علامة * تجلب جميع الاعمدة لو كنا بحاجة جلب اعمدة معيينة فسوف تستبل النجمة وتقوم بكتابة الاعمدة مثال توضيحي أكثر لجلب عمودين فقط
// $read_data = $conn->query("SELECT full_name,email FROM info");
/*
طريقة الاستخدام
ثم اسم الجدول المراد جلب البيانات منه FROM ثم الأعمدة المراد جلب البيانات منها أو علامة النجمة في حالة نرغب بجلب بتحديد جميع الأعمدة وجلب بيانتها ثم SELECT نقوم بكتابة 
 WHERE , ORDER BY , LIMIT , SUM  توجد العديد من الخواص في قراءة البيانات مثل أمر
سوف تتعرف عليها مستقبلا لأنك سوف تحتاجها
كأننا نقول حدد الاعمدة التالية من الجدول التالي
*/
// انتهينا من عمل قراءة البيانات وتبقى علينا استخراجها وعرضها
/*
البيانات الان مجتمعه في مصفوفه ونحتاج فك المصفوفة لاستخراج البيانات
iterator استخرجنا البيانات بإستخدام نوع من التكرار يسمى
ايضا توجد دوال اخرى foreach قمنا باستخدام دالة
طريقة الاستخدام 
foreach(a as b)
 وهو المتغير الذي قرأ البيانات a
 وهو متغير جديد اصبحت في البيانات ونستخدمه لعرضها b
 نقوم بعرض البيانات باسخدام المتغبر الجديد للبيانات ثم [''] نقوم بكتابة اسم العمود المراد عرض بياناته داخل القوس المربع
*/
foreach($read_data as $data)
{
  echo "الاسم : " . $data["full_name"];
  echo "رقم الجوال : " . $data["phone"];
  echo "البريد الإلكتروني : " . $data["email"];
}
?>


طريقة تحديث معلومات سطر من الجدول

في المثال التالي قمنا بتحديث معلومات سطر محدد في الجدول info.

<?php
$update_data = $conn->query("UPDATE info SET phone='9665999999',email='alaa@najmi.com' WHERE id=1");
// كلمة محجوزة لتحديث المعلومات UPDATE 
/*
طريقة الاستخدام
ثم ادخال اسم العمود المراد تحديث بياناته وكتابة القيمة الجديدة SET  ثم اسم الجدول الذي نرغب بتحديث المعلومات المتواجدة في احد صفوفة UPDATE نقوم بكتابة
 المقصود بها تريد التحديث لأي صف فقمنا بكتابة اسم العمود والقيمة التي سيتحقق من توفرها في العمود الذي قم بكتابته ان وجدت فيه القيمة سوف يقوم بعملية تحديث البيانات WHERE id=1
 
كأننا نقول حدث من الجدول التالي الممعلومات التالية للعمود والقيمة الجديدة اذا عثرت على عمود اسمه وتوجد فيه هذه القيمة
*/
// للتأكد من تنفيذ التحديث
if ($update_data === TRUE)
{
    echo "تم تحديث المعلومات بنجاح";
}
else 
{
    echo "خطأ، لم يتم تحديث المعلومات: " . $conn->error;
}
?>


طريقة حذف سطر من الجدول

في المثال التالي قمنا بحذف سطر واحد موجود في الجدول info.

<?php
$delete_row = $conn->query("DELETE FROM info WHERE id=1");
// كلمة محجوزة لحذف صف DELETE
/*
طريقة الاستخدام
 ثم اسم الجدول DELETE FROM
 المقصود بها تريد أن تحذف أي صف فقمنا بكتابة اسم العمود والقيمة التي سيتحقق من توفرها في العمود الذي قم بكتابته ان وجدت فيه القيمة سوف يقوم بعملية حذف الصف WHERE id=1
 
كأننا نقول أحذف من الجدول التالي اذا عثرت على عمود اسمه وتوجد فيه هذه القيمة
*/
// للتأكد من تنفيذ التحديث
if ($delete_row === TRUE) 
{
    echo "تم حذف الصف بنجاح";
}
else
{
    echo "خطأ، في حذف الصف: " . $conn->error;
}
?>


طريقة حذف جدول من قاعدة البيانات

في المثال التالي قمنا بحذف الجدول info كما هو من قاعدة البيانات.

<?php
$delete_table = $conn->query("DROP TABLE info");
//كلمة محجوزة لحذف الجدوال وقواعد البيانات DROP
/*
طريقة الاستخدام
نقوم بكتابة ثم اسم الجدول المراد حذفه DROP TABLE
 
وكأننا نقول احذف الجدول الذي اسمه
*/
if ($delete_table === TRUE) 
{
    echo "تم حذف الجدول بنجاح";
}
else
{
    echo "خطأ، لم يتم حذف الجدول: " . $conn->error;
}
?>


طريقة حذف قاعدة بيانات

في المثال التالي قمنا بحذف قاعدة البيانات learn بأكملها من السيرفر.

<?php
$delete_db = $conn->query("DROP DATABASE learn");
//كلمة محجوزة لحذف الجدوال وقواعد البيانات DROP
/*
طريقة الاستخدام
نقوم بكتابة ثم اسم قاعدة البيانات المراد حذفها DROP DATABASE
 
وكأننا نقول احذف قاعدة البيانات التي اسمها
*/
if ($delete_db === TRUE) 
{
    echo "تم حذف قاعدة البيانات بنجاح";
}
else
{
    echo "خطأ، في حذف قاعدة البيانات: " . $conn->error;
}
?>


طريقة حماية قواعد البيانات من SQL Injection

من المهم جداً فلترة كل المعلومات التي يرسلها المستخدم لضمان أن لا يرسل كود مؤذي يمرر لقاعدة البيانات.

لفلترة المعلومات التي يرسلها المستخدم نمرر كل معلومة تم إرسالها على الدالة mysqli_real_escape_string() قبل تمريرها لقاعدة البيانات كما في المثال التالي.

$full_name= $conn->real_escape_string($_POST['full_name']);
$phone = $conn->real_escape_string($_POST['phone']);
$email = $conn->real_escape_string($_POST['age'])
//  قمنا بإنشاء متغيرات لترتيب وتنظيم الكود بدلا من كتابة دالة فلترة المدخلات داخل عملية الاضافة
$inser_data = $conn->query("INSERT INTO info (id, full_name, phone, email)
VALUES (2, '$full_name', '$phone', '$email')");
/*
طريقة الاستخدام
real_escape_string دالة مهيئة لفترة المدخلات
 هو المتغير الخاص بإتصال قاعدة البيانات $conn حيث أن$conn->real_escape_string() نقوم بكتابة
هي دالة مهيئة لفترة المدخلات real_escape_string و
نقوم بكتابة داخلها المعلومة المراد فلترتها وتنظيها إن كانت تحتوي على كود خبيث ()
*/
if ($inser_data) === TRUE) {
    echo "تم إضافة البيانات للجدول";
}
else
{
    echo " خطأ، لم يتم اضافة البيانات: ".$conn->error;
}

يتضمن: PHP , database , SQL

آخر تحديث: 19-12-2021

الكاتب

علاء نجمي

رئيس قسم المطوّرين في نُضج الرقمية. حاصل على الشهادات الاحترافية HCIA-AI,PCAP,PCEP,CLE. كاتب ومُقدم دورات بمجال التقنية والبرمجة. مهتم بالأنظمة وحمايتها وتطويرها

تعليقات

لا يوجد أي تعليق بعد

أضف تعليق

يجب تسجيل الدخول حتى تتمكن من إضافة تعليق أو رد.

تقييم المقال

لم تقم بتقييم المقال بعد!

الدورات

أدوات مساعدة

أقسام الموقع

دورات
مقالات كتب مشاريع أسئلة