استخدام امتدادات PHP PostgreSQL (pgsql, PDO_PGSQL) في ServBay
تُعد ServBay بيئة تطوير ويب محلية متكاملة وقوية تدعم قاعدة بيانات PostgreSQL بشكل افتراضي، كما توفّر الامتدادات اللازمة للغة PHP، مما يمكّن المطورين من الاتصال والعمل مع قاعدة بيانات PostgreSQL بسهولة في تطبيقات PHP الخاصة بهم. يتم تثبيت وتفعيل امتدادي pgsql
وPDO_PGSQL
مسبقًا بشكل افتراضي لجميع إصدارات PHP المدعومة عبر ServBay.
مقدمة عن امتدادات PHP لـ PostgreSQL
PostgreSQL هو نظام قوي ومفتوح المصدر لإدارة قواعد البيانات الكائنية العلائقية، ويشتهر باستقراره وتكامل بياناته وثراء ميزاته. للتفاعل مع PostgreSQL عبر PHP، تحتاج إلى الامتدادات المناسبة من PHP. تقدّم ServBay بشكل أساسي امتدادين رئيسيين:
- امتداد
pgsql
: وهو الامتداد الأصلي لـ PostgreSQL في PHP، ويوفر مجموعة من الدوال التي تبدأ بـpg_
(مثلpg_connect
،pg_query
،pg_fetch_assoc
وغيرها) تتيح لك العمل أو تنفيذ العمليات مباشرة على قاعدة بيانات PostgreSQL، والاستفادة من خصائصها الخاصّة. - المحرّك
PDO_PGSQL
: وهو جزء من امتداد PHP Data Objects (PDO)، مُخصّص للاتصال بـ PostgreSQL. توفّر PDO طبقة تجريد موحدة للوصول إلى قواعد البيانات، مما يسمح باستخدام نفس الواجهة البرمجية (API) مع قواعد بيانات مختلفة (مثل PostgreSQL، MySQL، SQLite وغيرهم)، وهذا يساعد على كتابة أكواد أكثر قابلية للنقل بين مشاريع مختلفة.
امتدادات PHP PostgreSQL في ServBay
حرصت ServBay على تثبيت امتداد pgsql
ومحرك PDO_PGSQL
مسبقًا لجميع إصدارات PHP المدعومة، مع التأكد من تفعيلهما تلقائيًا دون الحاجة لأي إعدادات إضافية من جانبك.
كيف يتم تفعيل امتدادات PostgreSQL؟
في ServBay، لن تحتاج إلى إجراء أي خطوات يدوية لتفعيل امتدادات pgsql
أو PDO_PGSQL
. يتم تهيئتها لك تلقائيًا وتكون متاحة فورًا للاستخدام في شيفرة PHP الخاصة بك.
استخدام PostgreSQL في شيفرة PHP
بعد التأكد من تفعيل الامتدادات المناسبة، يمكنك استخدام دوال pgsql
أو كائنات PDO في كود PHP الخاص بك للاتصال والعمل مع قاعدة بيانات PostgreSQL.
المتطلبات المسبقة:
- يجب أن تكون خدمة PostgreSQL تعمل ضمن ServBay.
- يُفترض أنك أنشأت قاعدة بيانات باسم
servbay_db
. - يُفترض أنك أنشأت مستخدمًا باسم
servbay_user
، بكلمة مرورyour_password
ومنحت له الصلاحيات اللازمة على قاعدة البياناتservbay_db
. - يُفترض وجود جدول باسم
users
داخل قاعدة البياناتservbay_db
، يحتوي على أعمدةid
(SERIAL PRIMARY KEY)،name
(VARCHAR)،email
(VARCHAR)، وage
(INT).
يمكنك تنفيذ هذه الإعدادات باستخدام أداة adminer المدمجة مع ServBay أو عبر أدوات إدارة قواعد البيانات الأخرى مثل DBeaver أو pgAdmin.
فيما يلي أمثلة على كيفية الاتصال بقاعدة البيانات وتنفيذ العمليات الأساسية باستخدام كلا الطريقتين:
مثال برمجي (استخدام امتداد pgsql
)
<?php
// --- مثال على استخدام امتداد pgsql ---
// معاملات الاتصال بقاعدة البيانات
$host = "127.0.0.1"; // أو 'localhost'
$port = "5432"; // المنفذ الافتراضي لـ PostgreSQL
$dbname = "servbay_db";
$user = "servbay_user";
$password = "your_password"; // الرجاء استبدالها بكلمة المرور الحقيقية الخاصة بك
// بناء سلسلة الاتصال
$conn_string = "host={$host} port={$port} dbname={$dbname} user={$user} password={$password}";
// الاتصال بقاعدة بيانات PostgreSQL
$conn = pg_connect($conn_string);
// فحص نجاح الاتصال
if (!$conn) {
die("فشل الاتصال بـ pgsql: " . pg_last_error());
}
echo "تم الاتصال بنجاح عبر pgsql<br>";
// إدخال بيانات (لاحظ: pg_query لا يدعم ربط المعاملات مباشرة، ولهذا يجدر استخدام دوال مثل pg_query_params للحماية من حقن SQL)
$name = "ServBay Pgsql";
$email = "[email protected]";
$age = 7;
// استخدام pg_query_params لاستعلام آمن مع معاملات باراميترية
$query = "INSERT INTO users (name, email, age) VALUES ($1, $2, $3)";
$result = pg_query_params($conn, $query, array($name, $email, $age));
if ($result) {
echo "pgsql: تم إضافة السجل الجديد بنجاح<br>";
} else {
echo "خطأ في pgsql: " . pg_last_error($conn) . "<br>";
}
// استعلام عن البيانات
$query = "SELECT id, name, email, age FROM users WHERE name = $1";
$result = pg_query_params($conn, $query, array('ServBay Pgsql'));
if ($result) {
echo "بيانات الاستعلام عبر pgsql:<br>";
// التحقق من وجود نتائج
if (pg_num_rows($result) > 0) {
// جلب جميع الصفوف كمصفوفة ترابطية
$data = pg_fetch_all($result, PGSQL_ASSOC);
foreach ($data as $row) {
echo "id: " . $row["id"]. " - الاسم: " . $row["name"]. " - البريد الإلكتروني: " . $row["email"]. " - العمر: " . $row["age"]. "<br>";
}
} else {
echo "pgsql: لم يتم العثور على نتائج<br>";
}
} else {
echo "خطأ في الاستعلام عبر pgsql: " . pg_last_error($conn) . "<br>";
}
// إغلاق الاتصال بقاعدة البيانات
pg_close($conn);
?>
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
مثال برمجي (استخدام PDO_PGSQL
)
<?php
// --- مثال على استخدام PDO_PGSQL ---
// معاملات الاتصال بقاعدة البيانات
$host = '127.0.0.1'; // أو 'localhost'
$port = 5432; // المنفذ الافتراضي لـ PostgreSQL
$dbname = 'servbay_db';
$username = 'servbay_user';
$password = 'your_password'; // الرجاء استبدالها بكلمة المرور الحقيقية الخاصة بك
// اسم مصدر البيانات (DSN) لـ PostgreSQL
$dsn = "pgsql:host=$host;port=$port;dbname=$dbname";
// خيارات الاتصال لـ PDO
$options = [
PDO::ATTR_ERRMODE => PDO::ERRMODE_EXCEPTION, // رفع استثناء بدل التنبيه عند الخطأ
PDO::ATTR_DEFAULT_FETCH_MODE => PDO::FETCH_ASSOC, // بشكل افتراضي جلب النتائج كمصفوفة ترابطية
// PDO::ATTR_EMULATE_PREPARES => false, // عادة ليس هناك حاجة لتفعيله مع PostgreSQL
];
try {
// إنشاء كائن اتصال PDO
$pdo = new PDO($dsn, $username, $password, $options);
echo "تم الاتصال بنجاح عبر PDO_PGSQL<br>";
// إدخال بيانات (باستخدام عبارات محضرة مسبقاً)
$sql = "INSERT INTO users (name, email, age) VALUES (:name, :email, :age)";
$stmt = $pdo->prepare($sql);
$name = 'ServBay PDO Pgsql';
$email = '[email protected]';
$age = 12;
// ربط المعاملات وتنفيذ الاستعلام
$stmt->execute([
':name' => $name,
':email' => $email,
':age' => $age
]);
echo "PDO_PGSQL: تم إضافة سجل جديد بنجاح<br>";
// الاستعلام عن البيانات
$stmt = $pdo->prepare("SELECT id, name, email, age FROM users WHERE name = :name");
$stmt->execute([':name' => 'ServBay PDO Pgsql']);
// جلب جميع النتائج
$users = $stmt->fetchAll(); // باستخدام FETCH_ASSOC الافتراضي
if ($users) {
echo "بيانات الاستعلام عبر PDO_PGSQL:<br>";
foreach ($users as $row) {
echo "id: " . $row['id'] . " - الاسم: " . $row['name'] . " - البريد الإلكتروني: " . $row['email'] . " - العمر: " . $row['age'] . "<br>";
}
} else {
echo "PDO_PGSQL: لم يتم العثور على نتائج<br>";
}
} catch (\PDOException $e) {
// التقاط وعرض أخطاء الاتصال أو الاستعلام
throw new \PDOException($e->getMessage(), (int)$e->getCode());
}
// غالبًا ما يتم إغلاق اتصال PDO تلقائيًا بنهاية السكربت، ولا يلزم استدعاء close() بشكل صريح
// $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
كيفية استخدام الكود: احفظ أي من الأمثلة السابقة كملف PHP (مثلاً pg_test_native.php
أو pg_test_pdo.php
) ثم ضعه في مجلد الجذر الخاص بموقع ServBay لديك (مثال: /Applications/ServBay/www/myproject/
)، ثم قم بالوصول إليه عبر المتصفح باستخدام الرابط المناسب (مثلاً http://myproject.servbay.demo/pg_test_native.php
). تأكد من أن موقعك وخدمة PostgreSQL مفعّلَين ومكوّنين بشكل صحيح داخل ServBay.
الأسئلة الشائعة (FAQ)
س: هل أحتاج لتثبيت امتدادات PostgreSQL (pgsql
أو PDO_PGSQL
) يدويًا في ServBay؟
ج: لا، لا حاجة لذلك. فقد تم تثبيت وتفعيل امتدادات pgsql
وPDO_PGSQL
مسبقًا لجميع إصدارات PHP التي يديرها ServBay. يمكنك استخدامهما مباشرة في شيفراتك دون خطوات تثبيت أو تهيئة إضافية.
س: ما الفرق بين امتداد pgsql
ومحرك PDO_PGSQL
؟ وأيهما يجب أن أستخدم؟
ج:
- امتداد
pgsql
يوفّر مجموعة دوال مخصصة لـ PostgreSQL (مثلpg_connect
،pg_query_params
). إذا كنت بحاجة لاستخدام خصائص PostgreSQL المتقدّمة، فهو يوفّر تحكمًا مباشرًا أكثر. - محرك
PDO_PGSQL
هو جزء من طبقة التجريد PDO. استخدام PDO يجعل الشيفرة أكثر قابلية للنقل مستقبلاً في حال الانتقال لقاعدة بيانات أخرى (مثل MySQL)، كما يدعم عبارات محضرة مسبقاً ويوجد فيه ممارسات أمان حديثة موصى بها. - التوصية: للمشاريع الجديدة أو عند السعي نحو شيفرة أكثر أمانًا وقابلة للنقل، ننصح باستخدام
PDO_PGSQL
. أما المشاريع القديمة أو الحاجة لدوالpgsql
الخاصة، فامتدادpgsql
قد يكون أفضل.
س: كيف أعثر على معلومات الاتصال المطلوبة بخدمة PostgreSQL ضمن ServBay (المضيف والمنفذ واسم المستخدم وكلمة المرور واسم قاعدة البيانات)؟
ج:
- المضيف (Host): عادة
127.0.0.1
أوlocalhost
. - المنفذ (Port): المنفذ الافتراضي لـ PostgreSQL هو
5432
. يمكنك التأكد من المنفذ الفعلي من واجهة إدارة حزمة PostgreSQL في ServBay. - اسم المستخدم وكلمة المرور واسم قاعدة البيانات: أنت من أنشأها سابقًا ضمن PostgreSQL. بإمكانك استخدام أداة adminer المدمجة مع ServBay أو أي أداة إدارة PostgreSQL أخرى (مثل pgAdmin، DBeaver) لإنشاء قاعدة البيانات والمستخدم وتعيين الصلاحيات.
س: كيف يمكنني حماية شيفرتي من هجمات حقن SQL عند استخدام امتداد pgsql
؟
ج: لا تقم إطلاقًا بإدراج مدخلات المستخدم بشكلٍ مباشرٍ في نص استعلام SQL. استعمل دالة pg_query_params()
، فهي تتيح فصل نص الاستعلام عن المعاملات لتقوم المكتبة بمعالجة القيم بشكل آمن. أو يمكنك أيضًا استخدام pg_escape_string()
أو pg_escape_literal()
قبل تمرير البيانات إلى pg_query()
(ولكن pg_query_params
تعتبر الخيار الأسلم والأبسط).
الخلاصة
تسهّل ServBay عملية توصيل PHP بقاعدة بيانات PostgreSQL في بيئة macOS المحلية عبر تثبيت وتفعيل امتدادات pgsql
وPDO_PGSQL
افتراضيًا. فلا داعي للانشغال بتنصيب أو إعداد الامتدادات بنفسك، ويمكنك ببساطة اختيار الامتداد الأنسب لاحتياج مشروعك (وننصح غالبًا بـPDO لمزيد من الأمان وقابلية التوافق). بذلك، يمكن للمطور التركيز على منطق التطبيق والاستفادة بالكامل من إمكانيات PostgreSQL القوية في بناء تطبيقات ويب موثوقة وفعالة.