الجزء السابع – التعامل مع قواعد البيانات (MySQL) في PHP – سلسلة FSWD – PHP

في PHP، يمكننا الاتصال بقواعد البيانات واستخدامها من خلال MySQL باستخدام طريقتين رئيسيتين:
-
mysqli (MySQL Improved)
-
PDO (PHP Data Objects)
سنشرح أولاً كيفية الاتصال بقاعدة البيانات باستخدام mysqli ثم نغطي كيفية إجراء الاستعلامات الأساسية مثل SELECT, INSERT, UPDATE, DELETE، وأخيرًا كيفية حماية البيانات من SQL Injection باستخدام Prepared Statements.
أولاً: الاتصال بـ MySQL باستخدام mysqli
الاتصال بـ MySQL باستخدام mysqli
يتم من خلال دالة mysqli_connect()
التي تستقبل معطيات مثل: اسم الخادم (hostname)، اسم المستخدم (username)، كلمة المرور (password)، و اسم قاعدة البيانات (database).
مثال على الاتصال بـ MySQL باستخدام mysqli
<?php
// معلومات الاتصال
$servername = "localhost"; // الخادم المحلي
$username = "root"; // اسم المستخدم
$password = ""; // كلمة المرور (إذا كانت فارغة في localhost)
$dbname = "my_database"; // اسم قاعدة البيانات
// إنشاء الاتصال
$conn = mysqli_connect($servername, $username, $password, $dbname);
// التحقق من الاتصال
if (!$conn) {
die("الاتصال فشل: " . mysqli_connect_error());
}
echo "تم الاتصال بنجاح!";
?>
ثانيًا: إجراء استعلامات SQL
1. استعلام SELECT:
استعلام SELECT يُستخدم لاسترجاع البيانات من قاعدة البيانات.
مثال
<?php
// استعلام SELECT لاسترجاع بيانات من جدول "users"
$sql = "SELECT id, name, email FROM users";
$result = mysqli_query($conn, $sql);
// التحقق من وجود بيانات
if (mysqli_num_rows($result) > 0) {
// طباعة البيانات
while($row = mysqli_fetch_assoc($result)) {
echo "ID: " . $row["id"]. " - الاسم: " . $row["name"]. " - البريد الإلكتروني: " . $row["email"] . "<br>";
}
} else {
echo "لا توجد نتائج";
}
?>
2. استعلام INSERT:
استعلام INSERT يُستخدم لإضافة بيانات جديدة إلى قاعدة البيانات.
مثال
<?php
// استعلام INSERT لإضافة بيانات إلى جدول "users"
$sql = "INSERT INTO users (name, email) VALUES ('Ahmed', 'ahmed@example.com')";
// تنفيذ الاستعلام
if (mysqli_query($conn, $sql)) {
echo "تم إضافة السجل بنجاح";
} else {
echo "خطأ في إضافة السجل: " . mysqli_error($conn);
}
?>
3. استعلام UPDATE:
استعلام UPDATE يُستخدم لتحديث البيانات في قاعدة البيانات.
مثال
<?php
// استعلام UPDATE لتحديث بيانات في جدول "users"
$sql = "UPDATE users SET name='Ali' WHERE id=1";
// تنفيذ الاستعلام
if (mysqli_query($conn, $sql)) {
echo "تم تحديث السجل بنجاح";
} else {
echo "خطأ في تحديث السجل: " . mysqli_error($conn);
}
?>
4. استعلام DELETE:
استعلام DELETE يُستخدم لحذف البيانات من قاعدة البيانات.
مثال
<?php
// استعلام DELETE لحذف بيانات من جدول "users"
$sql = "DELETE FROM users WHERE id=1";
// تنفيذ الاستعلام
if (mysqli_query($conn, $sql)) {
echo "تم حذف السجل بنجاح";
} else {
echo "خطأ في حذف السجل: " . mysqli_error($conn);
}
?>
ثالثًا: حماية البيانات من SQL Injection باستخدام Prepared Statements
SQL Injection هو نوع من الهجمات التي قد تُستخدم لتنفيذ استعلامات SQL خبيثة عن طريق إدخال قيم غير موثوقة في استعلامات SQL. Prepared Statements هي طريقة آمنة للتعامل مع البيانات المدخلة من المستخدمين، حيث تقوم بفصل البيانات عن الاستعلام.
استخدام Prepared Statements مع mysqli
:
مثال على كيفية استخدام Prepared Statements لتجنب SQL Injection
<?php
// معلومات الاتصال
$servername = "localhost";
$username = "root";
$password = "";
$dbname = "my_database";
// إنشاء الاتصال
$conn = mysqli_connect($servername, $username, $password, $dbname);
// التحقق من الاتصال
if (!$conn) {
die("الاتصال فشل: " . mysqli_connect_error());
}
// استخدام Prepared Statements لإدخال بيانات بشكل آمن
$stmt = $conn->prepare("INSERT INTO users (name, email) VALUES (?, ?)");
$stmt->bind_param("ss", $name, $email); // "ss" تعني أن المتغيرات هما نص (string)
// تعيين القيم
$name = "Sami";
$email = "sami@example.com";
// تنفيذ الاستعلام
$stmt->execute();
echo "تم إضافة السجل بنجاح";
// إغلاق الاستعلام والاتصال
$stmt->close();
$conn->close();
?>
شرح الكود:
-
$conn->prepare()
: يقوم بإعداد الاستعلام مع وجود أماكن فارغة?
للبيانات المدخلة. -
$stmt->bind_param("ss", $name, $email)
: تربط القيم التي سيتم تمريرها إلى الاستعلام."ss"
تعني أن القيم هي نصوص (strings). -
$stmt->execute()
: يقوم بتشغيل الاستعلام.
ملاحظة: Prepared Statements في mysqli
تحمي من SQL Injection لأنها تفصل بين استعلام SQL والقيم المدخلة.
رابعًا: إنهاء الاتصال
بعد إتمام عملية الاستعلامات، من المهم إغلاق الاتصال بقاعدة البيانات.
<?php
// إغلاق الاتصال
mysqli_close($conn);
?>
ملخص:
-
قمنا أولاً بشرح كيفية الاتصال بقاعدة البيانات باستخدام
mysqli
. -
قدمنا أمثلة على كيفية إجراء استعلامات SELECT, INSERT, UPDATE, و DELETE.
-
ثم تعلمنا كيفية استخدام Prepared Statements لحماية البيانات من SQL Injection.
كود كامل متكامل
<?php
// معلومات الاتصال
$servername = "localhost";
$username = "root";
$password = "";
$dbname = "my_database";
// إنشاء الاتصال
$conn = mysqli_connect($servername, $username, $password, $dbname);
// التحقق من الاتصال
if (!$conn) {
die("الاتصال فشل: " . mysqli_connect_error());
}
// مثال على SELECT
$sql = "SELECT id, name, email FROM users";
$result = mysqli_query($conn, $sql);
if (mysqli_num_rows($result) > 0) {
while($row = mysqli_fetch_assoc($result)) {
echo "ID: " . $row["id"]. " - الاسم: " . $row["name"]. " - البريد الإلكتروني: " . $row["email"] . "<br>";
}
} else {
echo "لا توجد نتائج";
}
// مثال على INSERT باستخدام Prepared Statement
$stmt = $conn->prepare("INSERT INTO users (name, email) VALUES (?, ?)");
$stmt->bind_param("ss", $name, $email);
$name = "Sami";
$email = "sami@example.com";
$stmt->execute();
echo "تم إضافة السجل بنجاح";
// مثال على UPDATE
$sql_update = "UPDATE users SET name='Ali' WHERE id=1";
if (mysqli_query($conn, $sql_update)) {
echo "تم تحديث السجل بنجاح";
} else {
echo "خطأ في تحديث السجل: " . mysqli_error($conn);
}
// مثال على DELETE
$sql_delete = "DELETE FROM users WHERE id=1";
if (mysqli_query($conn, $sql_delete)) {
echo "تم حذف السجل بنجاح";
} else {
echo "خطأ في حذف السجل: " . mysqli_error($conn);
}
// إغلاق الاتصال
$stmt->close();
mysqli_close($conn);
?>
💰 هل تبحث عن طريقة سهلة للربح من الإنترنت؟
ابدأ الآن واكسب أموالًا حقيقية من خلال خطوات بسيطة! 🌟
اضغط وابدأ الربح