استخدام ملحقات PHP MySQL (mysqlnd، mysqli، PDO) في ServBay
تُسهل ServBay، كبيئة تطوير ويب محلية متكاملة وفعالة، عمليات التفاعل بين تطبيقات PHP وقواعد البيانات بشكل كبير. فهي تأتي مع ملحقات MySQL الأساسية التالية مثبتة ومفعلة بشكل افتراضي لجميع إصدارات PHP المدعومة: mysqlnd
، وmysqli
، وPDO_MySQL
. هذا يعني أنك لست بحاجة لإجراء أي إعدادات يدوية للبدء في التعامل مع قواعد بيانات MySQL أو MariaDB من مشاريعك في PHP.
ملحقات PHP MySQL المتاحة في ServBay
أدرجت ServBay في بيئة PHP المدارة ثلاث ملحقات MySQL أساسية لضمان التوافق والأداء العالي:
- المُشغل الأصلي لـ MySQL (
mysqlnd
): هو السائق الأصلي المدمج في PHP، يُستخدم كأساس لكل منmysqli
وPDO_MySQL
، ويمثل طبقة الاتصال الأساسية مع خوادم MySQL/MariaDB، ويوفر عادة أداءً أفضل وإدارة ذاكرة أكثر كفاءة. - MySQLi (
mysqli
): ملحق MySQL المحسن، يوفّر واجهتي برمجة إما بطريقة كائنية أو إجرائية، ويُخصص للتعامل مع قواعد بيانات MySQL وMariaDB، ويدعم ميزات متقدمة مثل العبارات المحضرة، المعاملات، الإجراءات المخزنة، والاستعلامات المتعددة. - PDO MySQL (
PDO_MySQL
): هو ملحق قاعدة بيانات موحد ضمن PHP Data Objects (PDO). يمنح واجهة موحدة للوصول إلى قواعد بيانات متعددة (تشمل MySQL، وMariaDB، وPostgreSQL، وSQLite وغيرها)، ما يسهل عملية نقل الكود بين بيئات قواعد بيانات مختلفة.
حالة التفعيل
في جميع إصدارات PHP بداخل ServBay، يتم تفعيل ملحقات mysqlnd
وmysqli
وPDO_MySQL
افتراضيًا. لذا لا تحتاج إلى القيام بأي خطوة إضافية لتفعيلها. ServBay تولت بالفعل إعدادات php.ini
اللازمة، ويمكنك استخدام هذه الملحقات مباشرة في كود PHP لديك للاتصال بقواعد البيانات.
شرح تفصيلي لملحقات PHP MySQL
فهم الفروقات بين هذه الملحقات الثلاثة يساعدك على اختيار الأنسب لمتطلبات مشروعك:
المُشغل الأصلي لـ MySQL (
mysqlnd
)- الدور الأساسي: هو مُشغل أصلي مكتوب بلغة C مُدمج مع PHP ويعمل كطبقة اتصال أساسية بين PHP وخوادم MySQL/MariaDB.
- الميزات الرئيسية: منذ PHP 5.3، أصبح
mysqlnd
هو السائق الافتراضي لملحقيmysqli
وPDO_MySQL
. وهو مدمج بالكامل مع PHP ولا يحتاج لربط خارجي مع مكتبات MySQL التقليدية مثلlibmysqlclient
. - المزايا الأساسية: مقارنةً بمكتبة
libmysqlclient
التقليدية، يوفرmysqlnd
أداءً أفضل، وإدارة ذاكرة أكثر كفاءة، كما يدعم إمكانيات إضافية مثل الاستعلامات غير المتزامنة، وتحسين الاتصالات الدائمة، وواجهة API للإضافات. في الغالب تتعامل التطبيقات معmysqlnd
بشكل غير مباشر عبرmysqli
أوPDO
.
MySQLi (
mysqli
)- الدور الأساسي: ملحق PHP مُصمم خصيصًا للاتصال بقواعد بيانات MySQL (الإصدار 4.1.3 فأعلى) وMariaDB.
- الميزات الرئيسية: يوفر طريقتي كتابة: كائنية (OOP) أو إجرائية (Procedural). يدعم العبارات المحضرة (لحماية من ثغرات SQL Injection)، التحكم بالمعاملات، استدعاء الإجراءات المخزنة، وتنفيذ الاستعلامات المتعددة.
- المزايا الأساسية: غني بالميزات ومحسّن للعمل مع MySQL/MariaDB، ويوفر أداءً ممتازًا. إذا كنت متأكدًا أن مشروعك سيستخدم فقط MySQL أو MariaDB وتحتاج إلى إمكانياتها المتقدمة، فـ
mysqli
هي الخيار المثالي.
PDO MySQL (
PDO_MySQL
)- الدور الأساسي: يوفّر PDO واجهة خفيفة وموحدة للوصول لعدة أنواع من قواعد البيانات، و
PDO_MySQL
هو السائق الخاص بقواعد MySQL/MariaDB. - الميزات الرئيسية: تتوفر واجهة موحدة للتعامل مع قواعد البيانات من خلال أصناف مثل
PDO
وPDOStatement
. يُجبَر استخدام العبارات المحضرة (من خلالprepare()
وexecute()
)، وهو ما يرفع مستوى أمان الكود ضد حقن SQL. كما يدعم إدارة المعاملات. - المزايا الأساسية: إمكانية النقل بين قواعد البيانات هي أقوى مميزات PDO. فإذا كان من الممكن انتقال تطبيقك لاحقًا إلى PostgreSQL أو SQLite أو غيرها، فإن استخدام PDO سيقلل الحاجة لتعديل الكود. كما يمنحك واجهة كائنية نظيفة وأكثر أمانًا وأقصر من حيث السطرية. عادة يُوصى به للمشاريع الجديدة.
- الدور الأساسي: يوفّر PDO واجهة خفيفة وموحدة للوصول لعدة أنواع من قواعد البيانات، و
مثال برمجي PHP: الاتصال بقاعدة البيانات والتنفيذ
فيما يلي مثالان يوضحان كيفية استخدام كل من ملحقي mysqli
وPDO
للاتصال بقاعدة بيانات تديرها ServBay (سواء كانت MariaDB أو MySQL) وإجراء عمليات بسيطة:
المتطلبات المسبقة:
- يجب تشغيل خدمة MySQL أو MariaDB عبر ServBay.
- تُفترض إنشاء قاعدة بيانات باسم
servbay_db
. - يُفترض وجود مستخدم باسم
servbay_user
مع كلمة مرورyour_password
والأذونات اللازمة على قاعدة البيانات. - يُفترض وجود جدول
users
في قاعدة البياناتservbay_db
ويحتوي على الأعمدة التالية:id
(عدد صحيح، مفتاح أساسي، ترقيم تلقائي)،name
(نص)،email
(نص)،age
(عدد صحيح).
يمكنك إعداد ذلك عبر phpMyAdmin المدمج مع ServBay أو أي أداة إدارة قواعد بيانات أخرى.
مثال كود (طريقة mysqli
)
<?php
// --- مثال mysqli ---
// بيانات الاتصال بقاعدة البيانات
$servername = "127.0.0.1"; // أو 'localhost'
$port = 3306; // المنفذ الافتراضي لـ MySQL/MariaDB في ServBay
$username = "servbay_user";
$password = "your_password"; // يُرجى استبداله بكلمة المرور الفعلية الخاصة بك
$dbname = "servbay_db";
// إنشاء اتصال mysqli (بالطريقة الكائنية)
$conn = new mysqli($servername, $username, $password, $dbname, $port);
// التحقق من نجاح الاتصال
if ($conn->connect_error) {
die("mysqli Connection failed: " . $conn->connect_error);
}
echo "تم الاتصال بنجاح باستخدام mysqli<br>";
// إدخال بيانات (باستخدام عبارات محضرة لمنع حقن SQL)
$stmt = $conn->prepare("INSERT INTO users (name, email, age) VALUES (?, ?, ?)");
$name = "ServBay Demo";
$email = "[email protected]";
$age = 5;
// "ssi" تعني string, string, integer
$stmt->bind_param("ssi", $name, $email, $age);
if ($stmt->execute()) {
echo "mysqli: تم إضافة سجل جديد بنجاح<br>";
} else {
echo "خطأ في mysqli: " . $stmt->error . "<br>";
}
$stmt->close();
// استعلام عن بيانات
$sql = "SELECT id, name, email, age FROM users WHERE name = 'ServBay Demo'";
$result = $conn->query($sql);
if ($result->num_rows > 0) {
echo "mysqli: البيانات المسترجعة:<br>";
// عرض البيانات
while($row = $result->fetch_assoc()) {
echo "id: " . $row["id"]. " - الاسم: " . $row["name"]. " - البريد الإلكتروني: " . $row["email"]. " - العمر: " . $row["age"]. "<br>";
}
} else {
echo "mysqli: لم يتم العثور على نتائج<br>";
}
// إغلاق الاتصال
$conn->close();
?>
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
مثال كود (طريقة PDO
)
<?php
// --- مثال PDO ---
// بيانات الاتصال بقاعدة البيانات
$host = '127.0.0.1'; // أو 'localhost'
$port = 3306; // المنفذ الافتراضي لـ MySQL/MariaDB في ServBay
$dbname = 'servbay_db';
$username = 'servbay_user';
$password = 'your_password'; // يُرجى استبداله بكلمة المرور الفعلية الخاصة بك
$charset = 'utf8mb4';
// اسم مصدر البيانات (DSN)
$dsn = "mysql:host=$host;port=$port;dbname=$dbname;charset=$charset";
// خيارات الاتصال مع PDO
$options = [
PDO::ATTR_ERRMODE => PDO::ERRMODE_EXCEPTION, // إطلاق الاستثناءات بدلاً من التحذيرات
PDO::ATTR_DEFAULT_FETCH_MODE => PDO::FETCH_ASSOC, // استرجاع النتائج كمصفوفات ترابطية افتراضيًا
PDO::ATTR_EMULATE_PREPARES => false, // استخدام العبارات المحضرة الأصلية
];
try {
// إنشاء اتصال PDO
$pdo = new PDO($dsn, $username, $password, $options);
echo "تم الاتصال بنجاح باستخدام PDO<br>";
// إدخال بيانات (باستخدام العبارات المحضرة)
$sql = "INSERT INTO users (name, email, age) VALUES (:name, :email, :age)";
$stmt = $pdo->prepare($sql);
$name = 'ServBay PDO Demo';
$email = '[email protected]';
$age = 10;
// ربط القيم وتنفيذ الاستعلام
$stmt->execute([
':name' => $name,
':email' => $email,
':age' => $age
]);
echo "PDO: تم إضافة سجل جديد بنجاح<br>";
// الاستعلام عن البيانات
$stmt = $pdo->prepare("SELECT id, name, email, age FROM users WHERE name = :name");
$stmt->execute([':name' => 'ServBay PDO Demo']);
// جلب جميع النتائج
$users = $stmt->fetchAll(); // يستخدم FETCH_ASSOC افتراضيًا
if ($users) {
echo "PDO: البيانات المسترجعة:<br>";
foreach ($users as $row) {
echo "id: " . $row['id'] . " - الاسم: " . $row['name'] . " - البريد الإلكتروني: " . $row['email'] . " - العمر: " . $row['age'] . "<br>";
}
} else {
echo "PDO: لم يتم العثور على نتائج<br>";
}
} catch (\PDOException $e) {
// التعامل مع أخطاء الاتصال أو الاستعلام
throw new \PDOException($e->getMessage(), (int)$e->getCode());
}
// يتم إغلاق الاتصال بـ PDO تلقائيًا عند انتهاء السكريبت ولا داعي لغلقه يدويًا
// $pdo = null; // يمكن إسناد القيمة null لإغلاق الاتصال صراحة
?>
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
وضع الكود: احفظ أي من الأمثلة أعلاه كملف بصيغة .php
(مثلاً db_test_mysqli.php
أو db_test_pdo.php
) وضعه في جذر موقعك ضمن ServBay (مثلًا /Applications/ServBay/www/myproject/
)، ثم افتح عنوان الـ URL المقابل عبر المتصفح (مثلاً http://myproject.servbay.demo/db_test_mysqli.php
). تأكد من أن الموقع تم إعداده وتشغيله بشكل صحيح عبر ServBay.
الأسئلة الشائعة (FAQ)
س: هل أحتاج لتثبيت ملحق MySQL لـ PHP يدويًا في ServBay؟
ج: لا تحتاج لذلك. ServBay يأتي مسبقًا مع تفعيل ملحقات MySQL الرئيسية (mysqlnd
، mysqli
، PDO_MySQL
) مع كل إصدار PHP. يمكنك استخدامهم فورًا في الكود دون أية إعدادات إضافية.
س: أيهما أختار: mysqli
أم PDO
؟
ج:
- ننصح بـ
PDO
: إذا كان تطبيقك قد يحتاج لاحقًا لدعم قواعد بيانات أخرى (بجانب MySQL/MariaDB)، أو إذا كنت تفضل تصميم برمجي حديث وكائني وقابل للنقل بدرجة عالية، إذ أنه يفرض استخدام العبارات المحضرة ويحسن أمان الكود. - قد تفضل
mysqli
: في حال كان مشروعك لن يستخدم سوى MySQL/MariaDB ويحتاج بعض الميزات المتقدمة الخاصة بها، فـmysqli
خيار قوي وذو أداء متميز ويوفر لك كلا البرمجة الكائنية أو الإجرائية.
بوجه عام للمشاريع الجديدة يُوصى باستخدام PDO
.
س: كيف أحدد بيانات الاتصال بخدمة MySQL/MariaDB في ServBay؟
ج:
- اسم المضيف (Host): غالبًا
127.0.0.1
أوlocalhost
. - المنفذ (Port): المنفذ الافتراضي في ServBay عادة
3306
، ويمكنك التأكد من رقم المنفذ الفعلي من واجهة إدارة الحزم في ServBay. - اسم المستخدم / كلمة المرور: استخدم بيانات مستخدم قاعدة البيانات الذي أنشأته في MySQL/MariaDB. غالبًا يُفضل عدم استخدام المستخدم root في البيئة الإنتاجية.
- اسم قاعدة البيانات: اسم قاعدة البيانات الهدف التي ترغب بالاتصال بها.
س4: لدي مشروع قديم يعتمد على دوال mysql_*
، هل تدعمها ServBay؟
ج: نعم، لتسهيل صيانة أو ترحيل المشاريع القديمة، وفرت ServBay في إصدار PHP 5.6 دعمًا خاصًا لدوال MySQL القديمة مثل mysql_connect
. هذه الدوال أصبحت مهجورة منذ PHP 5.5 وتم إزالتها كليًا في PHP 7.0. باستخدام PHP 5.6 المرفق مع ServBay، يمكنك تشغيل الكود القديم بسهولة دون الحاجة للبحث عن إصدارات PHP أعتق.
ولكن ننصح بشدة:
- استخدم هذه الإمكانية فقط لأغراض الصيانة المؤقتة أو ترحيل الأنظمة القديمة.
- للمشاريع الجديدة أو عند إعادة بناء الأكواد، يجب الانتقال إلى استخدام ملحقات أكثر حداثة وأمانًا مثل
mysqli
أوPDO
، فدوالmysql_*
قديمة وأكثر عرضة للمشاكل الأمنية ولا تدعم إمكانيات قواعد البيانات الحديثة.
الخلاصة
جعلت ServBay عمليات العمل مع قواعد بيانات MySQL/MariaDB أسهل بكثير من خلال تثبيت وتفعيل ملحقات mysqlnd
وmysqli
وPDO_MySQL
في جميع إصدارات PHP، بالإضافة لدعم دوال MySQL القديمة مع PHP 5.6. لم تعد بحاجة للانشغال بتركيب أو إعداد هذه الملحقات — فقط اختر الملحق الأنسب لمشروعك (غالبًا نوصي بـ PDO أو mysqli) وابدأ التطوير فورًا.
تمنحك هذه السهولة الجاهزة تركيزًا كاملًا على منطق تطبيقك والاستفادة من بيئة ServBay المحلية المستقرة والفعالة لتطوير، واختبار، وصيانة خدمات الويب الخاصة بك بسرعة وثقة.