استخدام PDO و MySQLi للتعامل مع قواعد البيانات في PHP

تمت الكتابة بواسطة: عبد الحكيم

تارخ آخر تحديث: 02 سبتمبر 2024

محتوى المقال

استخدام PDO و MySQLi للتعامل مع قواعد البيانات في PHP

يعتبر كل من PDO و MySQLi من الأدوات الشائعة للتعامل مع قواعد بيانات MySQL في PHP. يقدم كل منهما ميزات مختلفة ويمكن استخدامهما لإدارة البيانات بفعالية. في هذا المقال، سنتعرف على كيفية استخدام كل من PDO و MySQLi للتعامل مع قواعد البيانات في PHP، وسنقارن بين الميزات التي يقدمها كل منهما.

ما هو MySQLi؟

MySQLi (MySQL Improved) هو امتداد لـ PHP يوفر وظائف محسنة للتعامل مع قواعد بيانات MySQL. يدعم MySQLi البرمجة الكائنية والإجرائية، كما يوفر أداءً أفضل من الامتداد القديم MySQL. يسمح MySQLi أيضًا باستخدام العبارات المجهزة (Prepared Statements) مما يحسن من أمان الاستعلامات.

ما هو PDO؟

PDO (PHP Data Objects) هو امتداد آخر لـ PHP يوفر واجهة موحدة للتعامل مع قواعد بيانات متعددة، بما في ذلك MySQL. يدعم PDO البرمجة الكائنية فقط، ويتميز بمرونته حيث يمكن استخدامه مع مختلف أنواع قواعد البيانات مثل PostgreSQL و SQLite. يدعم PDO العبارات المجهزة ويوفر ميزات متقدمة مثل معالجة الأخطاء بواسطة الاستثناءات (Exceptions).

الاتصال بقاعدة البيانات باستخدام MySQLi

يمكنك استخدام MySQLi للاتصال بقاعدة بيانات MySQL بطريقتين: الطريقة الإجرائية والطريقة الكائنية. سنوضح هنا كيفية إنشاء اتصال باستخدام الطريقة الكائنية:

<?php
# إعداد بيانات الاتصال بقاعدة البيانات
$servername = "localhost";
$username = "username";
$password = "password";
$dbname = "database_name";

# إنشاء اتصال باستخدام MySQLi
$conn = new mysqli($servername, $username, $password, $dbname);

# التحقق من الاتصال
if ($conn->connect_error) {
   die("فشل الاتصال: " . $conn->connect_error);
}
echo "تم الاتصال بقاعدة البيانات بنجاح";
?>

الاتصال بقاعدة البيانات باستخدام PDO

PDO يوفر واجهة أكثر مرونة للتعامل مع قواعد البيانات. المثال التالي يوضح كيفية إنشاء اتصال بقاعدة بيانات MySQL باستخدام PDO:

<?php
# إعداد بيانات الاتصال بقاعدة البيانات
$servername = "localhost";
$username = "username";
$password = "password";
$dbname = "database_name";

try {
   # إنشاء اتصال باستخدام PDO
   $conn = new PDO("mysql:host=$servername;dbname=$dbname", $username, $password);
   # إعداد نمط الخطأ
   $conn->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
   echo "تم الاتصال بقاعدة البيانات بنجاح";
} catch (PDOException $e) {
   echo "فشل الاتصال: " . $e->getMessage();
}
?>

تنفيذ استعلامات SQL باستخدام MySQLi

يمكنك تنفيذ استعلامات SQL باستخدام MySQLi بكل سهولة. في المثال التالي، سنوضح كيفية تنفيذ استعلام لإدراج بيانات جديدة في جدول users:

<?php
# إعداد استعلام SQL
$sql = "INSERT INTO users (username, email, password) VALUES ('JohnDoe', 'john@example.com', 'password123')";

# تنفيذ الاستعلام
if ($conn->query($sql) === TRUE) {
   echo "تم إدخال البيانات بنجاح";
} else {
   echo "خطأ: " . $conn->error;
}
?>

تنفيذ استعلامات SQL باستخدام PDO

يتيح لك PDO تنفيذ استعلامات SQL باستخدام العبارات المجهزة (Prepared Statements)، مما يحسن أمان التطبيق. المثال التالي يوضح كيفية تنفيذ استعلام لإدراج بيانات جديدة في جدول users:

<?php
try {
   # إعداد العبارة المجهزة
   $stmt = $conn->prepare("INSERT INTO users (username, email, password) VALUES (:username, :email, :password)");

   # ربط القيم بالمعلمات
   $stmt->bindParam(':username', $username);
   $stmt->bindParam(':email', $email);
   $stmt->bindParam(':password', $password);

   # إعداد القيم
   $username = "JaneDoe";
   $email = "jane@example.com";
   $password = "password456";

   # تنفيذ العبارة المجهزة
   $stmt->execute();
   echo "تم إدخال البيانات بنجاح";
} catch (PDOException $e) {
   echo "خطأ: " . $e->getMessage();
}
?>

التعامل مع الأخطاء في MySQLi و PDO

كل من MySQLi و PDO يوفران آليات للتعامل مع الأخطاء. في MySQLi، يتم استخدام الشرط if للتحقق من نجاح العمليات، بينما في PDO يتم التعامل مع الأخطاء باستخدام الاستثناءات (Exceptions). استخدام الاستثناءات مع PDO يتيح التعامل مع الأخطاء بطريقة أكثر مرونة وفعالية.

مقارنة بين MySQLi و PDO

لكل من MySQLi و PDO مزايا وعيوب، وفيما يلي مقارنة بينهما:

  • التوافق مع قواعد البيانات: MySQLi يدعم MySQL فقط، بينما PDO يدعم العديد من قواعد البيانات مثل MySQL، PostgreSQL، SQLite، وغيرها.
  • البرمجة الإجرائية والكائنية: MySQLi يدعم البرمجة الإجرائية والكائنية، بينما يدعم PDO البرمجة الكائنية فقط.
  • العبارات المجهزة: يدعم كل من MySQLi و PDO العبارات المجهزة، لكن PDO يوفر مرونة أكبر في التعامل مع هذه العبارات.
  • التعامل مع الأخطاء: MySQLi يتطلب التحقق اليدوي من الأخطاء، بينما يتعامل PDO مع الأخطاء باستخدام الاستثناءات.

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

بعد الانتهاء من التعامل مع قاعدة البيانات، من المهم إغلاق الاتصال لتحرير الموارد. في MySQLi، يتم ذلك باستخدام mysqli_close()، بينما في PDO يتم إغلاق الاتصال بإسناد null إلى متغير الاتصال:

<?php
# إغلاق الاتصال بقاعدة البيانات في MySQLi
mysqli_close($conn);

# إغلاق الاتصال بقاعدة البيانات في PDO
$conn = null;
?>

الخلاصة

سواء كنت تستخدم MySQLi أو PDO، فإن كلاهما يوفر أدوات قوية للتعامل مع قواعد البيانات في PHP. يعتمد الاختيار بينهما على احتياجات المشروع، بما في ذلك نوع قاعدة البيانات المستخدمة ومتطلبات الأمان والمرونة. من المهم دائمًا اتباع أفضل الممارسات في التعامل مع قواعد البيانات لضمان أمان وفعالية التطبيق.

طور مهاراتك: مقالات يجب قراءتها في البرمجة